feat: add jetstream config validation models

This commit is contained in:
Joseph Doherty
2026-02-23 05:59:03 -05:00
parent 6d23e89fe8
commit d1935bc9ec
4 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
namespace NATS.Server.JetStream.Models;
public sealed class ConsumerConfig
{
public string DurableName { get; set; } = string.Empty;
public string? FilterSubject { get; set; }
public AckPolicy AckPolicy { get; set; } = AckPolicy.None;
public int AckWaitMs { get; set; } = 30_000;
public int MaxDeliver { get; set; } = 1;
public bool Push { get; set; }
public int HeartbeatMs { get; set; }
}
public enum AckPolicy
{
None,
Explicit,
}

View File

@@ -0,0 +1,9 @@
namespace NATS.Server.JetStream.Models;
public sealed class StreamConfig
{
public string Name { get; set; } = string.Empty;
public List<string> Subjects { get; set; } = [];
public int MaxMsgs { get; set; }
public int Replicas { get; set; } = 1;
}

View File

@@ -0,0 +1,26 @@
using NATS.Server.JetStream.Models;
namespace NATS.Server.JetStream.Validation;
public static class JetStreamConfigValidator
{
public static ValidationResult Validate(StreamConfig config)
=> string.IsNullOrWhiteSpace(config.Name) || config.Subjects.Count == 0
? ValidationResult.Invalid("name/subjects required")
: 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);
}

View File

@@ -0,0 +1,15 @@
using NATS.Server.JetStream.Models;
using NATS.Server.JetStream.Validation;
namespace NATS.Server.Tests;
public class JetStreamConfigValidationTests
{
[Fact]
public void Stream_requires_name_and_subjects()
{
var config = new StreamConfig { Name = "", Subjects = [] };
var result = JetStreamConfigValidator.Validate(config);
result.IsValid.ShouldBeFalse();
}
}