using NATS.Server.JetStream.Models; namespace NATS.Server.JetStream.Validation; public static class JetStreamConfigValidator { public static ValidationResult Validate(StreamConfig config) { if (string.IsNullOrWhiteSpace(config.Name) || config.Subjects.Count == 0) return ValidationResult.Invalid("name/subjects required"); if (config.Retention == RetentionPolicy.WorkQueue && config.MaxConsumers == 0) return ValidationResult.Invalid("workqueue retention requires max consumers > 0"); if (config.MaxMsgSize < 0) return ValidationResult.Invalid("max_msg_size must be >= 0"); if (config.MaxMsgsPer < 0) return ValidationResult.Invalid("max_msgs_per must be >= 0"); if (config.MaxAgeMs < 0) return ValidationResult.Invalid("max_age_ms must be >= 0"); return ValidationResult.Valid(); } } public sealed class ValidationResult { public bool IsValid { get; } public string Message { get; } private ValidationResult(bool isValid, string message) { IsValid = isValid; Message = message; } public static ValidationResult Valid() => new(true, string.Empty); public static ValidationResult Invalid(string message) => new(false, message); }