diff --git a/broker/context.go b/broker/context.go new file mode 100644 index 00000000..842c8cfe --- /dev/null +++ b/broker/context.go @@ -0,0 +1,46 @@ +package broker + +import ( + "context" +) + +type brokerKey struct{} + +func FromContext(ctx context.Context) (Broker, bool) { + c, ok := ctx.Value(brokerKey{}).(Broker) + return c, ok +} + +func NewContext(ctx context.Context, s Broker) context.Context { + return context.WithValue(ctx, brokerKey{}, s) +} + +// SetSubscribeOption returns a function to setup a context with given value +func SetSubscribeOption(k, v interface{}) SubscribeOption { + return func(o *SubscribeOptions) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, k, v) + } +} + +// SetBrokerOption returns a function to setup a context with given value +func SetBrokerOption(k, v interface{}) Option { + return func(o *Options) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, k, v) + } +} + +// SetPublishOption returns a function to setup a context with given value +func SetPublishOption(k, v interface{}) PublishOption { + return func(o *PublishOptions) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, k, v) + } +} diff --git a/server/context.go b/server/context.go index fdd9ff75..fa9f3c8b 100644 --- a/server/context.go +++ b/server/context.go @@ -14,3 +14,13 @@ func FromContext(ctx context.Context) (Server, bool) { func NewContext(ctx context.Context, s Server) context.Context { return context.WithValue(ctx, serverKey{}, s) } + +// SetServerSubscriberOption returns a function to setup a context with given value +func SetServerSubscriberOption(k, v interface{}) SubscriberOption { + return func(o *SubscriberOptions) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, k, v) + } +}