package queue import ( "reflect" "time" "forge.cadoles.com/cadoles/bouncer/internal/store" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" ) type LayerOptions struct { Capacity int64 `mapstructure:"capacity"` Matchers []string `mapstructure:"matchers"` KeepAlive time.Duration `mapstructure:"keepAlive"` } func fromStoreOptions(storeOptions store.LayerOptions) (*LayerOptions, error) { layerOptions := LayerOptions{ Capacity: 1000, Matchers: []string{"*"}, KeepAlive: 30 * time.Second, } config := mapstructure.DecoderConfig{ DecodeHook: stringToDurationHook, Result: &layerOptions, } decoder, err := mapstructure.NewDecoder(&config) if err != nil { return nil, err } if err := decoder.Decode(storeOptions); err != nil { return nil, errors.WithStack(err) } return &layerOptions, nil } func stringToDurationHook(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) { if t == reflect.TypeOf(*new(time.Duration)) && f == reflect.TypeOf("") { return time.ParseDuration(data.(string)) } return data, nil }