package bus import ( merrors "git.sendico.io/tech/sxchnge/shared/errors" "git.sendico.io/tech/sxchnge/shared/messaging/reliable" ) // Config composes canonical shared messaging settings for this service's queue. type Config struct { Stream reliable.DurableStreamSettings `yaml:"stream"` Provisioning reliable.DurableProvisioningSettings `yaml:"provisioning"` } func DefaultConfig() Config { return Config{ Stream: reliable.DurableStreamSettings{Name: "SXCHNGE_NOTIFICATIONS", Subjects: []string{subject}, Storage: "file", MaxAgeHours: 48, Replicas: 1}, Provisioning: reliable.DurableProvisioningSettings{Mode: reliable.DurableProvisioningApp, Environment: reliable.DurableEnvironmentNonProduction}, } } func (c Config) Validate() error { if c.Stream.Name != "SXCHNGE_NOTIFICATIONS" || len(c.Stream.Subjects) != 1 || c.Stream.Subjects[0] != subject || c.Stream.Storage != "file" || c.Stream.MaxAgeHours < 48 || c.Stream.MaxAgeHours > 24*30 { return merrors.InvalidArgument("invalid notifications stream configuration") } if c.Stream.Replicas != 1 && c.Stream.Replicas != 3 && c.Stream.Replicas != 5 { return merrors.InvalidArgument("stream replicas must be 1, 3 or 5") } switch c.Provisioning.Mode { case reliable.DurableProvisioningApp, reliable.DurableProvisioningOps, reliable.DurableProvisioningHybrid: default: return merrors.InvalidArgument("invalid stream provisioning mode") } switch c.Provisioning.Environment { case reliable.DurableEnvironmentProduction, reliable.DurableEnvironmentNonProduction: default: return merrors.InvalidArgument("invalid stream provisioning environment") } return nil }