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