expose useful broker and server methods

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2020-09-22 13:15:05 +03:00
parent dc5dc6ab5b
commit ec3c1a02fc
2 changed files with 56 additions and 0 deletions

46
broker/context.go Normal file
View File

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

View File

@ -14,3 +14,13 @@ func FromContext(ctx context.Context) (Server, bool) {
func NewContext(ctx context.Context, s Server) context.Context { func NewContext(ctx context.Context, s Server) context.Context {
return context.WithValue(ctx, serverKey{}, s) 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)
}
}