arcast/pkg/server/options.go

103 lines
1.9 KiB
Go
Raw Normal View History

2023-12-13 20:07:22 +01:00
package server
import (
"crypto/tls"
2023-12-13 20:07:22 +01:00
"github.com/jaevor/go-nanoid"
"github.com/pkg/errors"
)
var newRandomInstanceID func() string
func init() {
generator, err := nanoid.Standard(21)
if err != nil {
panic(errors.Wrap(err, "could not generate random instance id"))
}
newRandomInstanceID = generator
}
type Options struct {
InstanceID string
Address string
TLSAddress string
TLSCertificate *tls.Certificate
EnableServiceDiscovery bool
EnableApps bool
DefaultApp string
Apps []App
2023-12-13 20:07:22 +01:00
}
type OptionFunc func(opts *Options)
func NewOptions(funcs ...OptionFunc) *Options {
opts := &Options{
InstanceID: NewRandomInstanceID(),
Address: ":",
TLSAddress: ":",
EnableServiceDiscovery: true,
EnableApps: false,
DefaultApp: "",
Apps: make([]App, 0),
2023-12-13 20:07:22 +01:00
}
for _, fn := range funcs {
fn(opts)
}
return opts
}
func WithAppsEnabled(enabled bool) OptionFunc {
return func(opts *Options) {
opts.EnableApps = enabled
}
}
func WithDefaultApp(defaultApp string) OptionFunc {
return func(opts *Options) {
opts.DefaultApp = defaultApp
}
}
func WithApps(apps ...App) OptionFunc {
return func(opts *Options) {
opts.Apps = apps
}
}
2023-12-13 20:07:22 +01:00
func WithAddress(addr string) OptionFunc {
return func(opts *Options) {
opts.Address = addr
}
}
func WithTLSAddress(addr string) OptionFunc {
return func(opts *Options) {
opts.TLSAddress = addr
}
}
func WithTLSCertificate(cert *tls.Certificate) OptionFunc {
return func(opts *Options) {
opts.TLSCertificate = cert
}
}
2023-12-13 20:07:22 +01:00
func WithInstanceID(id string) OptionFunc {
return func(opts *Options) {
opts.InstanceID = id
}
}
func WithServiceDiscoveryEnabled(enabled bool) OptionFunc {
2023-12-13 20:07:22 +01:00
return func(opts *Options) {
opts.EnableServiceDiscovery = enabled
2023-12-13 20:07:22 +01:00
}
}
func NewRandomInstanceID() string {
return newRandomInstanceID()
}