diff --git a/src/NATS.Server/ClientKind.cs b/src/NATS.Server/ClientKind.cs new file mode 100644 index 0000000..4a238ca --- /dev/null +++ b/src/NATS.Server/ClientKind.cs @@ -0,0 +1,22 @@ +namespace NATS.Server; + +/// +/// Identifies the type of a client connection. +/// Maps to Go's client kind constants in client.go:45-65. +/// +public enum ClientKind +{ + Client, + Router, + Gateway, + Leaf, + System, + JetStream, + Account, +} + +public static class ClientKindExtensions +{ + public static bool IsInternal(this ClientKind kind) => + kind is ClientKind.System or ClientKind.JetStream or ClientKind.Account; +} diff --git a/tests/NATS.Server.Tests/InternalClientTests.cs b/tests/NATS.Server.Tests/InternalClientTests.cs new file mode 100644 index 0000000..7fb52a7 --- /dev/null +++ b/tests/NATS.Server.Tests/InternalClientTests.cs @@ -0,0 +1,17 @@ +namespace NATS.Server.Tests; + +public class InternalClientTests +{ + [Theory] + [InlineData(ClientKind.Client, false)] + [InlineData(ClientKind.Router, false)] + [InlineData(ClientKind.Gateway, false)] + [InlineData(ClientKind.Leaf, false)] + [InlineData(ClientKind.System, true)] + [InlineData(ClientKind.JetStream, true)] + [InlineData(ClientKind.Account, true)] + public void IsInternal_returns_correct_value(ClientKind kind, bool expected) + { + kind.IsInternal().ShouldBe(expected); + } +}