hpds_node/options.go

137 lines
3.1 KiB
Go

package hpds_node
import (
"crypto/tls"
"github.com/lucas-clemente/quic-go"
"git.hpds.cc/Component/network"
"git.hpds.cc/Component/network/log"
)
const (
// DefaultMqAddr is the default address of downstream mq.
DefaultMqAddr = "localhost:9000"
)
// Option is a function that applies a hpds-Client option.
type Option func(o *Options)
// Options are the options for YoMo
type Options struct {
MqAddr string // target mq endpoint address
// MqListenAddr string // mq endpoint address
MqWorkflowConfig string // mq workflow file
MeshConfigURL string // meshConfigURL is the URL of edge-mesh config
ServerOptions []network.ServerOption
ClientOptions []network.ClientOption
QuicConfig *quic.Config
TLSConfig *tls.Config
Logger log.Logger
}
// WithMqAddr return a new options with MqAddr set to addr.
func WithMqAddr(addr string) Option {
return func(o *Options) {
o.MqAddr = addr
}
}
// // WithMqListenAddr return a new options with MqListenAddr set to addr.
// func WithMqListenAddr(addr string) Option {
// return func(o *options) {
// o.MqListenAddr = addr
// }
// }
// TODO: WithWorkflowConfig
// WithMeshConfigURL sets the initial edge-mesh config URL for the YoMo-MessageQueue.
func WithMeshConfigURL(url string) Option {
return func(o *Options) {
o.MeshConfigURL = url
}
}
// WithTLSConfig sets the TLS configuration for the client.
func WithTLSConfig(tc *tls.Config) Option {
return func(o *Options) {
o.TLSConfig = tc
}
}
// WithQuicConfig sets the QUIC configuration for the client.
func WithQuicConfig(qc *quic.Config) Option {
return func(o *Options) {
o.QuicConfig = qc
}
}
// WithClientOptions returns a new options with opts.
func WithClientOptions(opts ...network.ClientOption) Option {
return func(o *Options) {
o.ClientOptions = opts
}
}
// WithServerOptions returns a new options with opts.
func WithServerOptions(opts ...network.ServerOption) Option {
return func(o *Options) {
o.ServerOptions = opts
}
}
// WithAuth sets the server authentication method (used by server)
func WithAuth(name string, args ...string) Option {
return func(o *Options) {
o.ServerOptions = append(
o.ServerOptions,
network.WithAuth(name, args...),
)
}
}
// WithCredential sets the client credential method (used by client)
func WithCredential(payload string) Option {
return func(o *Options) {
o.ClientOptions = append(
o.ClientOptions,
network.WithCredential(payload),
)
}
}
// WithObserveDataTags sets client data tag list.
func WithObserveDataTags(tags ...byte) Option {
return func(o *Options) {
o.ClientOptions = append(
o.ClientOptions,
network.WithObserveDataTags(tags...),
)
}
}
// WithLogger sets the client logger
func WithLogger(logger log.Logger) Option {
return func(o *Options) {
o.ClientOptions = append(
o.ClientOptions,
network.WithLogger(logger),
)
}
}
// NewOptions creates a new options for YoMo-Client.
func NewOptions(opts ...Option) *Options {
options := &Options{}
for _, o := range opts {
o(options)
}
if options.MqAddr == "" {
options.MqAddr = DefaultMqAddr
}
return options
}