diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/keybinds/registry.go')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/keybinds/registry.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/keybinds/registry.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/keybinds/registry.go new file mode 100644 index 0000000..d726838 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/keybinds/registry.go @@ -0,0 +1,79 @@ +package keybinds + +import ( + "fmt" + "sync" +) + +type Registry struct { + mu sync.RWMutex + providers map[string]Provider +} + +func NewRegistry() *Registry { + return &Registry{ + providers: make(map[string]Provider), + } +} + +func (r *Registry) Register(provider Provider) error { + if provider == nil { + return fmt.Errorf("cannot register nil provider") + } + + name := provider.Name() + if name == "" { + return fmt.Errorf("provider name cannot be empty") + } + + r.mu.Lock() + defer r.mu.Unlock() + + if _, exists := r.providers[name]; exists { + return fmt.Errorf("provider %q already registered", name) + } + + r.providers[name] = provider + return nil +} + +func (r *Registry) Get(name string) (Provider, error) { + r.mu.RLock() + defer r.mu.RUnlock() + + provider, exists := r.providers[name] + if !exists { + return nil, fmt.Errorf("provider %q not found", name) + } + + return provider, nil +} + +func (r *Registry) List() []string { + r.mu.RLock() + defer r.mu.RUnlock() + + names := make([]string, 0, len(r.providers)) + for name := range r.providers { + names = append(names, name) + } + return names +} + +var defaultRegistry = NewRegistry() + +func GetDefaultRegistry() *Registry { + return defaultRegistry +} + +func Register(provider Provider) error { + return defaultRegistry.Register(provider) +} + +func Get(name string) (Provider, error) { + return defaultRegistry.Get(name) +} + +func List() []string { + return defaultRegistry.List() +} |