mirror of
https://github.com/redis/go-redis.git
synced 2025-07-29 17:41:15 +03:00
refactor: remove handlerWrapper and use separate maps in registry
- Remove unnecessary handlerWrapper complexity from push notifications - Use separate maps for handlers and protection status in registry - Store handlers directly without indirection layer - Maintain same instance identity for registered/retrieved handlers - Preserve all protected handler functionality with cleaner implementation Changes: - internal/pushnotif/registry.go: Use separate handlers and protected maps - push_notifications.go: Remove handlerWrapper, store handlers directly - Maintain thread-safe operations with simplified code structure Benefits: - Reduced memory overhead (no wrapper objects) - Direct handler storage without type conversion - Cleaner, more maintainable code - Same functionality with better performance - Eliminated unnecessary complexity layer - Preserved all existing behavior and safety guarantees
This commit is contained in:
@ -8,14 +8,16 @@ import (
|
||||
|
||||
// Registry manages push notification handlers.
|
||||
type Registry struct {
|
||||
mu sync.RWMutex
|
||||
handlers map[string]handlerEntry
|
||||
mu sync.RWMutex
|
||||
handlers map[string]Handler
|
||||
protected map[string]bool
|
||||
}
|
||||
|
||||
// NewRegistry creates a new push notification registry.
|
||||
func NewRegistry() *Registry {
|
||||
return &Registry{
|
||||
handlers: make(map[string]handlerEntry),
|
||||
handlers: make(map[string]Handler),
|
||||
protected: make(map[string]bool),
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,10 +32,8 @@ func (r *Registry) RegisterHandler(pushNotificationName string, handler Handler,
|
||||
return fmt.Errorf("handler already registered for push notification: %s", pushNotificationName)
|
||||
}
|
||||
|
||||
r.handlers[pushNotificationName] = handlerEntry{
|
||||
handler: handler,
|
||||
protected: protected,
|
||||
}
|
||||
r.handlers[pushNotificationName] = handler
|
||||
r.protected[pushNotificationName] = protected
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -43,16 +43,17 @@ func (r *Registry) UnregisterHandler(pushNotificationName string) error {
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
|
||||
entry, exists := r.handlers[pushNotificationName]
|
||||
_, exists := r.handlers[pushNotificationName]
|
||||
if !exists {
|
||||
return fmt.Errorf("no handler registered for push notification: %s", pushNotificationName)
|
||||
}
|
||||
|
||||
if entry.protected {
|
||||
if r.protected[pushNotificationName] {
|
||||
return fmt.Errorf("cannot unregister protected handler for push notification: %s", pushNotificationName)
|
||||
}
|
||||
|
||||
delete(r.handlers, pushNotificationName)
|
||||
delete(r.protected, pushNotificationName)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -62,11 +63,11 @@ func (r *Registry) GetHandler(pushNotificationName string) Handler {
|
||||
r.mu.RLock()
|
||||
defer r.mu.RUnlock()
|
||||
|
||||
entry, exists := r.handlers[pushNotificationName]
|
||||
handler, exists := r.handlers[pushNotificationName]
|
||||
if !exists {
|
||||
return nil
|
||||
}
|
||||
return entry.handler
|
||||
return handler
|
||||
}
|
||||
|
||||
// GetRegisteredPushNotificationNames returns a list of all registered push notification names.
|
||||
|
@ -28,9 +28,3 @@ type RegistryInterface interface {
|
||||
GetRegisteredPushNotificationNames() []string
|
||||
HandleNotification(ctx context.Context, notification []interface{}) bool
|
||||
}
|
||||
|
||||
// handlerEntry represents a registered handler with its protection status.
|
||||
type handlerEntry struct {
|
||||
handler Handler
|
||||
protected bool
|
||||
}
|
||||
|
Reference in New Issue
Block a user