feat: add jetstream config validation models
This commit is contained in:
18
src/NATS.Server/JetStream/Models/ConsumerConfig.cs
Normal file
18
src/NATS.Server/JetStream/Models/ConsumerConfig.cs
Normal 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,
|
||||
}
|
||||
9
src/NATS.Server/JetStream/Models/StreamConfig.cs
Normal file
9
src/NATS.Server/JetStream/Models/StreamConfig.cs
Normal 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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
15
tests/NATS.Server.Tests/JetStreamConfigValidationTests.cs
Normal file
15
tests/NATS.Server.Tests/JetStreamConfigValidationTests.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user