-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Basic use case APIs, publish and consume methods implemented. Consider this as the 'low-level' JetStream API where we can build our more familiar NATS Client Simplified JetStream API.
- Loading branch information
Showing
17 changed files
with
432 additions
and
78 deletions.
There are no files selected for viewing
42 changes: 42 additions & 0 deletions
42
src/NATS.Client.JetStream/Internal/JSErrorAwareJsonSerializer.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
using System.Buffers; | ||
using System.Text.Json; | ||
using NATS.Client.Core; | ||
using NATS.Client.JetStream.Models; | ||
|
||
namespace NATS.Client.JetStream.Internal; | ||
|
||
internal sealed class JSErrorAwareJsonSerializer : INatsSerializer | ||
{ | ||
public static readonly JSErrorAwareJsonSerializer Default = new(); | ||
|
||
public int Serialize<T>(ICountableBufferWriter bufferWriter, T? value) => | ||
throw new NotSupportedException(); | ||
|
||
public T? Deserialize<T>(in ReadOnlySequence<byte> buffer) | ||
{ | ||
// We need to determine what type we're deserializing into | ||
// .NET 6 new APIs to the rescue: we can read the buffer once | ||
// by deserializing into a document, inspect and using the new | ||
// API deserialize to the final type from the document. | ||
var jsonDocument = JsonDocument.Parse(buffer); | ||
if (jsonDocument.RootElement.TryGetProperty("error", out var errorElement)) | ||
{ | ||
var error = errorElement.Deserialize<ApiError>(); | ||
if (error == null) | ||
throw new NatsJetStreamException("Can't parse JetStream error JSON payload"); | ||
throw new JSErrorException(error); | ||
} | ||
|
||
return jsonDocument.Deserialize<T>(); | ||
} | ||
|
||
public object? Deserialize(in ReadOnlySequence<byte> buffer, Type type) => | ||
throw new NotSupportedException(); | ||
} | ||
|
||
internal class JSErrorException : Exception | ||
{ | ||
public JSErrorException(ApiError error) => Error = error; | ||
|
||
public ApiError Error { get; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
using NATS.Client.JetStream.Models; | ||
|
||
namespace NATS.Client.JetStream; | ||
|
||
/// <summary> | ||
/// JetStream response including an optional error property encapsulating both successful and failed calls. | ||
/// </summary> | ||
/// <typeparam name="T">JetStream response type</typeparam> | ||
public readonly struct JSResponse<T> | ||
{ | ||
internal JSResponse(T? response, ApiError? error) | ||
{ | ||
Response = response; | ||
Error = error; | ||
} | ||
|
||
public T? Response { get; } | ||
|
||
public ApiError? Error { get; } | ||
|
||
public bool Success => Error == null && Response != null; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 5 additions & 3 deletions
8
src/NATS.Client.JetStream/Models/ConsumerConfigurationAckPolicy.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,15 @@ | ||
namespace NATS.Client.JetStream.Models; | ||
|
||
// TODO: enum member naming with JSON serialization isn't working for some reason | ||
#pragma warning disable SA1300 | ||
public enum ConsumerConfigurationAckPolicy | ||
{ | ||
[System.Runtime.Serialization.EnumMember(Value = @"none")] | ||
None = 0, | ||
none = 0, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"all")] | ||
All = 1, | ||
all = 1, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"explicit")] | ||
Explicit = 2, | ||
@explicit = 2, | ||
} |
14 changes: 8 additions & 6 deletions
14
src/NATS.Client.JetStream/Models/ConsumerConfigurationDeliverPolicy.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,24 @@ | ||
namespace NATS.Client.JetStream.Models; | ||
|
||
// TODO: enum member naming with JSON serialization isn't working for some reason | ||
#pragma warning disable SA1300 | ||
public enum ConsumerConfigurationDeliverPolicy | ||
{ | ||
[System.Runtime.Serialization.EnumMember(Value = @"all")] | ||
All = 0, | ||
all = 0, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"last")] | ||
Last = 1, | ||
last = 1, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"new")] | ||
New = 2, | ||
@new = 2, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"by_start_sequence")] | ||
ByStartSequence = 3, | ||
by_start_sequence = 3, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"by_start_time")] | ||
ByStartTime = 4, | ||
by_start_time = 4, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"last_per_subject")] | ||
LastPerSubject = 5, | ||
last_per_subject = 5, | ||
} |
6 changes: 4 additions & 2 deletions
6
src/NATS.Client.JetStream/Models/ConsumerConfigurationReplayPolicy.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
namespace NATS.Client.JetStream.Models; | ||
|
||
// TODO: enum member naming with JSON serialization isn't working for some reason | ||
#pragma warning disable SA1300 | ||
public enum ConsumerConfigurationReplayPolicy | ||
{ | ||
[System.Runtime.Serialization.EnumMember(Value = @"instant")] | ||
Instant = 0, | ||
instant = 0, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"original")] | ||
Original = 1, | ||
original = 1, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 4 additions & 2 deletions
6
src/NATS.Client.JetStream/Models/StreamConfigurationCompression.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
namespace NATS.Client.JetStream.Models; | ||
|
||
// TODO: enum member naming with JSON serialization isn't working for some reason | ||
#pragma warning disable SA1300 | ||
public enum StreamConfigurationCompression | ||
{ | ||
[System.Runtime.Serialization.EnumMember(Value = @"none")] | ||
None = 0, | ||
none = 0, | ||
|
||
[System.Runtime.Serialization.EnumMember(Value = @"s2")] | ||
S2 = 1, | ||
s2 = 1, | ||
} |
Oops, something went wrong.