Files
natsdotnet/src/NATS.Server/JetStream/Validation/JetStreamConfigValidator.cs
2026-02-23 12:11:19 -05:00

39 lines
1.3 KiB
C#

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);
}