Files
larksuite-cli/shortcuts/event/registry.go
梁硕 83dfb068ad feat: open-source lark-cli — the official CLI for Lark/Feishu
Change-Id: I113d9cdb5403cec347efe4595415e34a18b7decf
2026-03-28 10:36:25 +08:00

60 lines
1.9 KiB
Go

// Copyright (c) 2026 Lark Technologies Pte. Ltd.
// SPDX-License-Identifier: MIT
package event
import "fmt"
// ProcessorRegistry manages event_type → EventProcessor mappings.
type ProcessorRegistry struct {
processors map[string]EventProcessor
fallback EventProcessor
}
// NewProcessorRegistry creates a registry with a fallback for unregistered event types.
func NewProcessorRegistry(fallback EventProcessor) *ProcessorRegistry {
return &ProcessorRegistry{
processors: make(map[string]EventProcessor),
fallback: fallback,
}
}
// Register adds a processor. Returns an error on duplicate event type registration.
func (r *ProcessorRegistry) Register(p EventProcessor) error {
et := p.EventType()
if _, exists := r.processors[et]; exists {
return fmt.Errorf("duplicate event processor for: %s", et)
}
r.processors[et] = p
return nil
}
// Lookup finds a processor by event type. Returns fallback if not registered. Never returns nil.
func (r *ProcessorRegistry) Lookup(eventType string) EventProcessor {
if p, ok := r.processors[eventType]; ok {
return p
}
return r.fallback
}
// DefaultRegistry builds the standard processor registry.
// To add a new processor, just add r.Register(...) here.
func DefaultRegistry() *ProcessorRegistry {
r := NewProcessorRegistry(&GenericProcessor{})
// im.message
_ = r.Register(&ImMessageProcessor{})
_ = r.Register(&ImMessageReadProcessor{})
_ = r.Register(NewImReactionCreatedProcessor())
_ = r.Register(NewImReactionDeletedProcessor())
// im.chat.member
_ = r.Register(NewImChatBotAddedProcessor())
_ = r.Register(NewImChatBotDeletedProcessor())
_ = r.Register(NewImChatMemberUserAddedProcessor())
_ = r.Register(NewImChatMemberUserWithdrawnProcessor())
_ = r.Register(NewImChatMemberUserDeletedProcessor())
// im.chat
_ = r.Register(&ImChatUpdatedProcessor{})
_ = r.Register(&ImChatDisbandedProcessor{})
return r
}