package peer import ( "cwtch.im/cwtch/event" "cwtch.im/cwtch/model" "cwtch.im/cwtch/model/attr" ) type ProfileHooks interface { // EventsToRegister returns a set of events that the extension is interested hooking EventsToRegister() []event.Type // ExperimentsToRegister returns a set of experiments that the extension is interested in being notified about ExperimentsToRegister() []string // OnEvent is called whenever an event Registered with RegisterEvents is called OnEvent(event event.Event, profile CwtchPeer) // OnContactRequestValue is Hooked when a contact sends a request for the given path OnContactRequestValue(profile CwtchPeer, conversation model.Conversation, eventID string, path attr.ScopedZonedPath) // OnContactReceiveValue is Hooked after a profile receives a response to a Get/Val Request OnContactReceiveValue(profile CwtchPeer, conversation model.Conversation, path attr.ScopedZonedPath, value string, exists bool) } type ProfileHook struct { extension ProfileHooks events map[event.Type]bool experiments map[string]bool } func ConstructHook(extension ProfileHooks) ProfileHook { events := make(map[event.Type]bool) for _, event := range extension.EventsToRegister() { events[event] = true } experiments := make(map[string]bool) for _, experiment := range extension.ExperimentsToRegister() { experiments[experiment] = true } return ProfileHook{ extension, events, experiments, } }