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