diff options
Diffstat (limited to 'internal/resources/resources.go')
| -rw-r--r-- | internal/resources/resources.go | 45 |
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 +} |
