package reliable import ( "time" "github.com/mitchellh/mapstructure" "github.com/tech/sendico/pkg/model" ) const SettingsBlockKey = "reliable_publisher" type Settings struct { Enabled bool `mapstructure:"enabled" yaml:"enabled"` BatchSize int `mapstructure:"batch_size" yaml:"batch_size"` PollIntervalSeconds int `mapstructure:"poll_interval_seconds" yaml:"poll_interval_seconds"` MaxAttempts int `mapstructure:"max_attempts" yaml:"max_attempts"` } func DefaultSettings() Settings { return Settings{ Enabled: true, BatchSize: defaultBatchSize, PollIntervalSeconds: int(defaultPollInterval.Seconds()), MaxAttempts: defaultMaxAttempts, } } func ParseSettings(driverSettings model.SettingsT) (Settings, error) { settings := DefaultSettings() if len(driverSettings) == 0 { return settings, nil } raw, ok := driverSettings[SettingsBlockKey] if !ok || raw == nil { return settings, nil } if err := mapstructure.Decode(raw, &settings); err != nil { return Settings{}, err } settings.applyDefaults() return settings, nil } func (s *Settings) PollInterval() time.Duration { if s == nil || s.PollIntervalSeconds <= 0 { return defaultPollInterval } return time.Duration(s.PollIntervalSeconds) * time.Second } func (s *Settings) applyDefaults() { if s.BatchSize <= 0 { s.BatchSize = defaultBatchSize } if s.PollIntervalSeconds <= 0 { s.PollIntervalSeconds = int(defaultPollInterval.Seconds()) } if s.MaxAttempts <= 0 { s.MaxAttempts = defaultMaxAttempts } }