39 lines
1.3 KiB
C#
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);
|
|
}
|