package broker import ( "context" "crypto/tls" ) //================================ // Options //================================ type Options struct { Addrs []string Secure bool // Handler executed when error happens in broker message // processing ErrorHandler Handler TLSConfig *tls.Config // Other options for implementations of the interface // can be stored in a context Context context.Context } type Option func(*Options) // Addrs sets the host addresses to be used by the broker func Addrs(addrs ...string) Option { return func(o *Options) { o.Addrs = addrs } } // ErrorHandler will catch all broker errors that cant be handled // in normal way, for example Codec errors func ErrorHandler(h Handler) Option { return func(o *Options) { o.ErrorHandler = h } } // Secure communication with the broker func Secure(b bool) Option { return func(o *Options) { o.Secure = b } } // TLSConfig Specify TLS Config func TLSConfig(t *tls.Config) Option { return func(o *Options) { o.TLSConfig = t } } //================================ // PublishOptions //================================ type PublishOptions struct { // Other options for implementations of the interface // can be stored in a context Context context.Context } type PublishOption func(*PublishOptions) // PublishContext set context func PublishContext(ctx context.Context) PublishOption { return func(o *PublishOptions) { o.Context = ctx } } //================================ // SubscribeOptions //================================ type SubscribeOptions struct { // AutoAck defaults to true. When a handler returns // with a nil error the message is acked. AutoAck bool // Subscribers with the same queue name // will create a shared subscription where each // receives a subset of messages. Queue string // Other options for implementations of the interface // can be stored in a context Context context.Context } func NewSubscribeOptions(opts ...SubscribeOption) SubscribeOptions { opt := SubscribeOptions{ AutoAck: true, } for _, o := range opts { o(&opt) } return opt } type SubscribeOption func(*SubscribeOptions) // DisableAutoAck will disable auto acking of messages // after they have been handled. func DisableAutoAck() SubscribeOption { return func(o *SubscribeOptions) { o.AutoAck = false } } // Queue sets the name of the queue to share messages on func Queue(name string) SubscribeOption { return func(o *SubscribeOptions) { o.Queue = name } } // SubscribeContext set context func SubscribeContext(ctx context.Context) SubscribeOption { return func(o *SubscribeOptions) { o.Context = ctx } }