edge/pkg/http/options.go

58 lines
1.3 KiB
Go
Raw Permalink Normal View History

2023-02-09 12:16:36 +01:00
package http
import (
"time"
"forge.cadoles.com/arcad/edge/pkg/app"
"forge.cadoles.com/arcad/edge/pkg/bus"
"forge.cadoles.com/arcad/edge/pkg/bus/memory"
"github.com/igm/sockjs-go/v3/sockjs"
)
type HandlerOptions struct {
Bus bus.Bus
SockJS sockjs.Options
ServerModuleFactories []app.ServerModuleFactory
UploadMaxFileSize int64
}
func defaultHandlerOptions() *HandlerOptions {
sockjsOptions := func() sockjs.Options {
return sockjs.DefaultOptions
}()
sockjsOptions.DisconnectDelay = 10 * time.Second
return &HandlerOptions{
Bus: memory.NewBus(),
SockJS: sockjsOptions,
ServerModuleFactories: make([]app.ServerModuleFactory, 0),
UploadMaxFileSize: 1024 * 10, // 10Mb
}
}
type HandlerOptionFunc func(*HandlerOptions)
func WithServerModules(factories ...app.ServerModuleFactory) HandlerOptionFunc {
return func(opts *HandlerOptions) {
opts.ServerModuleFactories = factories
}
}
func WithSockJS(options sockjs.Options) HandlerOptionFunc {
return func(opts *HandlerOptions) {
opts.SockJS = options
}
}
func WithBus(bus bus.Bus) HandlerOptionFunc {
return func(opts *HandlerOptions) {
opts.Bus = bus
}
}
func WithUploadMaxFileSize(size int64) HandlerOptionFunc {
return func(opts *HandlerOptions) {
opts.UploadMaxFileSize = size
}
}