cosmos-sdk/core/appmodule/event.go
2023-01-24 17:41:05 +00:00

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)
}