summaryrefslogtreecommitdiff
path: root/pkg/types
diff options
context:
space:
mode:
authorNicolas Paul <n@nc0.fr>2023-05-31 00:27:49 +0200
committerNicolas Paul <n@nc0.fr>2023-05-31 00:27:49 +0200
commit5c34ce83e56e8eb8649d8ce831d2cc1d6b5ca5be (patch)
treea882a5a8410331085747d4dab8d04f81105dac32 /pkg/types
parent2c359752da4bcdf4566e7d2986fb99d7e4de36f9 (diff)
Add type structs for modules
Signed-off-by: Nicolas Paul <n@nc0.fr>
Diffstat (limited to 'pkg/types')
-rw-r--r--pkg/types/types.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/pkg/types/types.go b/pkg/types/types.go
new file mode 100644
index 0000000..4610ad4
--- /dev/null
+++ b/pkg/types/types.go
@@ -0,0 +1,71 @@
+package types
+
+import "sync"
+
+// Vcs is an enum for version control systems supported by the standard Go
+// toolchain.
+//
+// See https://pkg.go.dev/cmd/go#hdr-Module_configuration_for_non_public_modules
+type Vcs string
+
+// Vcs enum.
+const (
+ VcsBazaar Vcs = "bzr"
+ VcsFossil Vcs = "fossil"
+ VcsGit Vcs = "git"
+ VcsMercurial Vcs = "hg"
+ VcsSubversion Vcs = "svn"
+)
+
+// Module represents a Go module to index.
+type Module struct {
+ Path string // module path (without domain)
+ Vcs Vcs // vcs system
+ Repo string // repository's home
+ Dir string // url template
+ File string // url template
+}
+
+// Index is the global object representing the Starlark configuration.
+type Index struct {
+ Domain string
+ Modules map[string]Module
+ // internal
+ lock sync.Mutex
+}
+
+// SetDomain sets the domain of the index.
+func (i *Index) SetDomain(d string) {
+ i.lock.Lock()
+ defer i.lock.Unlock()
+ i.Domain = d
+}
+
+// AddModule adds a module to the index.
+func (i *Index) AddModule(n string, m Module) {
+ i.lock.Lock()
+ defer i.lock.Unlock()
+ i.Modules[n] = m
+}
+
+// GetModule returns a module from the index.
+func (i *Index) GetModule(n string) Module {
+ i.lock.Lock()
+ defer i.lock.Unlock()
+ return i.Modules[n]
+}
+
+// RemoveModule removes a module from the index.
+func (i *Index) RemoveModule(n string) {
+ i.lock.Lock()
+ defer i.lock.Unlock()
+ delete(i.Modules, n)
+}
+
+// CheckModule checks if a module is in the index.
+func (i *Index) CheckModule(n string) bool {
+ i.lock.Lock()
+ defer i.lock.Unlock()
+ _, ok := i.Modules[n]
+ return ok
+}