summaryrefslogtreecommitdiff
path: root/internal/resource/repository.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/resource/repository.go')
-rw-r--r--internal/resource/repository.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/resource/repository.go b/internal/resource/repository.go
new file mode 100644
index 0000000..8affedc
--- /dev/null
+++ b/internal/resource/repository.go
@@ -0,0 +1,50 @@
+package resource
+
+import (
+ "fmt"
+ "log"
+ "sync"
+
+ "codeberg.org/snonux/gonf/internal/resource"
+)
+
+var (
+ repo repository
+ once sync.Once
+)
+
+func initRepository() {
+ once.Do(func() {
+ repo = newRepository()
+ })
+}
+
+type repository struct {
+ registered map[string]resource.Resource
+ mu *sync.Mutex
+}
+
+func newRepository() repository {
+ return repository{
+ registered: make(map[string]resource.Resource),
+ mu: new(sync.Mutex),
+ }
+}
+
+func (r repository) register(res Resource) error {
+ r.mu.Lock()
+ defer r.mu.Unlock()
+
+ if _, exists := r.registered[res.ID()]; exists {
+ return fmt.Errorf("resource %v already registered", res)
+ }
+
+ r.registered[res.ID()] = res
+ log.Printf("Registered resource %v\n", res)
+
+ return nil
+}
+
+// func (r repository)(res Resource) error {
+// return nil
+// }