33 lines
1017 B
Go
33 lines
1017 B
Go
package appmodule
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/protobuf/runtime/protoiface"
|
|
)
|
|
|
|
// HasEventListeners is the extension interface that modules should implement to register
|
|
// event listeners.
|
|
type HasEventListeners interface {
|
|
AppModule
|
|
|
|
// RegisterEventListeners registers the module's events listeners.
|
|
RegisterEventListeners(registrar *EventListenerRegistrar)
|
|
}
|
|
|
|
// EventListenerRegistrar allows registering event listeners.
|
|
type EventListenerRegistrar struct {
|
|
listeners []any
|
|
}
|
|
|
|
// GetListeners gets the event listeners that have been registered
|
|
func (e *EventListenerRegistrar) GetListeners() []any {
|
|
return e.listeners
|
|
}
|
|
|
|
// RegisterEventListener registers an event listener for event type E. If a non-nil error is returned by the listener,
|
|
// it will cause the process which emitted the event to fail.
|
|
func RegisterEventListener[E protoiface.MessageV1](registrar *EventListenerRegistrar, listener func(context.Context, E) error) {
|
|
registrar.listeners = append(registrar.listeners, listener)
|
|
}
|