diff --git a/v2/context_helper.go b/v2/context_helper.go index 18f3fae..e0c1217 100644 --- a/v2/context_helper.go +++ b/v2/context_helper.go @@ -9,11 +9,15 @@ func CreateMetaDataFilter[T any](c IContext, metaDataSelector func(IContext) T, } func MetadataAs[T any](context IContext, key string) (T, bool) { + tmp, _ := context.Get(key) + return ValueAs[T](tmp) +} + +func ValueAs[T any](data any) (T, bool) { var v T - tmp, ok := context.Get(key) - if tmp == nil { + if data == nil { return v, false } - res, ok := tmp.(T) + res, ok := data.(T) return res, ok } diff --git a/v2/handler.go b/v2/handler.go index c587821..102a201 100644 --- a/v2/handler.go +++ b/v2/handler.go @@ -2,5 +2,5 @@ package serverevents type IEventHandler interface { CanExecute(IContext) bool - Handle(IContext) + Handle(IContext, any) } diff --git a/v2/implementation_test/events/greeter.go b/v2/implementation_test/events/greeter.go index c22b0da..6fd3959 100644 --- a/v2/implementation_test/events/greeter.go +++ b/v2/implementation_test/events/greeter.go @@ -25,8 +25,11 @@ func (handler greeterEventHandler) CanExecute(context serverevents.IContext) boo return ok } -func (handler greeterEventHandler) Handle(context serverevents.IContext) { - userName, _ := serverevents.MetadataAs[string](context, "UserName") +func (handler greeterEventHandler) Handle(context serverevents.IContext, data any) { + userName, ok := serverevents.ValueAs[string](data) + if !ok { + userName, _ = serverevents.MetadataAs[string](context, "UserName") + } context.Dispatch("greet", greeting{ Message: fmt.Sprintf("Hello, %s", userName), }, withSameUserName(context)) diff --git a/v2/implementation_test/events/ping.go b/v2/implementation_test/events/ping.go index 7975413..db519e2 100644 --- a/v2/implementation_test/events/ping.go +++ b/v2/implementation_test/events/ping.go @@ -10,10 +10,10 @@ func NewPingEventHandler() serverevents.IEventHandler { return &pingEventHandler{} } -func (p pingEventHandler) CanExecute(context serverevents.IContext) bool { +func (p pingEventHandler) CanExecute(_ serverevents.IContext) bool { return true } -func (p pingEventHandler) Handle(context serverevents.IContext) { +func (p pingEventHandler) Handle(context serverevents.IContext, _ any) { context.Dispatch("pong", nil, context.IsCaller) } diff --git a/v2/middleware.go b/v2/middleware.go index d73e656..deb4e92 100644 --- a/v2/middleware.go +++ b/v2/middleware.go @@ -81,7 +81,7 @@ func (middleware *serverEventsMiddleware) handleEventStream(w http.ResponseWrite println(fmt.Sprintf("no Handler found for Event %s", ev.Type)) } else { if handler.CanExecute(context) { - handler.Handle(context) + handler.Handle(context, ev.Data) } }