From 107c4c471dd3a4381baf7bf7a170b9d969f2d2f8 Mon Sep 17 00:00:00 2001 From: VisualBean Date: Mon, 22 Jul 2024 13:54:18 +0200 Subject: [PATCH 1/3] make pulsar binding --- .../v2/Bindings/ChannelBindings.cs | 4 + .../v2/Bindings/MessageBindings.cs | 5 ++ .../v2/Bindings/OperationBindings.cs | 4 + .../Bindings/Pulsar/PulsarChannelBinding.cs | 83 +++++++++++++++++++ .../Bindings/Pulsar/PulsarMessageBinding.cs | 12 +++ .../Bindings/Pulsar/PulsarOperationBinding.cs | 12 +++ .../v2/Bindings/Pulsar/PulsarServerBinding.cs | 15 ++++ .../v2/Bindings/Pulsar/README.md | 1 + .../v2/Bindings/ServerBindings.cs | 4 + 9 files changed, 140 insertions(+) create mode 100644 src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarChannelBinding.cs create mode 100644 src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarMessageBinding.cs create mode 100644 src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarOperationBinding.cs create mode 100644 src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs create mode 100644 src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/README.md diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/ChannelBindings.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/ChannelBindings.cs index 5d79e428..57b792ca 100644 --- a/src/Saunter/AsyncApiSchema/v2/Bindings/ChannelBindings.cs +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/ChannelBindings.cs @@ -3,6 +3,7 @@ using Saunter.AsyncApiSchema.v2.Bindings.Http; using Saunter.AsyncApiSchema.v2.Bindings.Kafka; using Saunter.AsyncApiSchema.v2.Bindings.Mqtt; +using Saunter.AsyncApiSchema.v2.Bindings.Pulsar; namespace Saunter.AsyncApiSchema.v2.Bindings { @@ -32,5 +33,8 @@ public class ChannelBindings : IChannelBindings [JsonProperty("mqtt", NullValueHandling = NullValueHandling.Ignore)] public MqttChannelBinding Mqtt { get; set; } + + [JsonProperty("pulsar", NullValueHandling = NullValueHandling.Ignore)] + public PulsarChannelBinding Pulsar { get; set; } } } diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/MessageBindings.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/MessageBindings.cs index 130fd8b7..ab4d1037 100644 --- a/src/Saunter/AsyncApiSchema/v2/Bindings/MessageBindings.cs +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/MessageBindings.cs @@ -3,6 +3,7 @@ using Saunter.AsyncApiSchema.v2.Bindings.Http; using Saunter.AsyncApiSchema.v2.Bindings.Kafka; using Saunter.AsyncApiSchema.v2.Bindings.Mqtt; +using Saunter.AsyncApiSchema.v2.Bindings.Pulsar; namespace Saunter.AsyncApiSchema.v2.Bindings { @@ -32,5 +33,9 @@ public class MessageBindings : IMessageBindings [JsonProperty("mqtt", NullValueHandling = NullValueHandling.Ignore)] public MqttMessageBinding Mqtt { get; set; } + + [JsonProperty("pulsar", NullValueHandling = NullValueHandling.Ignore)] + public PulsarMessageBinding Pulsar { get; set; } + } } diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/OperationBindings.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/OperationBindings.cs index 9116d43d..87035f94 100644 --- a/src/Saunter/AsyncApiSchema/v2/Bindings/OperationBindings.cs +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/OperationBindings.cs @@ -3,6 +3,7 @@ using Saunter.AsyncApiSchema.v2.Bindings.Http; using Saunter.AsyncApiSchema.v2.Bindings.Kafka; using Saunter.AsyncApiSchema.v2.Bindings.Mqtt; +using Saunter.AsyncApiSchema.v2.Bindings.Pulsar; namespace Saunter.AsyncApiSchema.v2.Bindings { @@ -32,5 +33,8 @@ public class OperationBindings : IOperationBindings [JsonProperty("mqtt", NullValueHandling = NullValueHandling.Ignore)] public MqttOperationBinding Mqtt { get; set; } + + [JsonProperty("pulsar", NullValueHandling = NullValueHandling.Ignore)] + public PulsarOperationBinding Pulsar { get; set; } } } diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarChannelBinding.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarChannelBinding.cs new file mode 100644 index 00000000..d46a8c7d --- /dev/null +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarChannelBinding.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace Saunter.AsyncApiSchema.v2.Bindings.Pulsar +{ + /// + /// See: https://github.com/asyncapi/bindings/tree/master/pulsar#channel-binding-object + /// + public class PulsarChannelBinding + { + /// + /// The version of this binding. If omitted, "latest" MUST be assumed. + /// + [JsonProperty("bindingVersion", NullValueHandling = NullValueHandling.Ignore)] + public string BindingVersion { get; set; } + + /// + /// The namespace associated with the topic. + /// + [JsonProperty("namespace", NullValueHandling = NullValueHandling.Ignore)] + public string Namespace { get; set; } + + /// + /// persistence of the topic in Pulsar persistent or non-persistent. + /// + [JsonProperty("persistence", NullValueHandling = NullValueHandling.Ignore)] + public Persistence? Persistence { get; set; } + + /// + /// Topic compaction threshold given in bytes. + /// + [JsonProperty("compaction", NullValueHandling = NullValueHandling.Ignore)] + public int? Compaction { get; set; } + + /// + /// A list of clusters the topic is replicated to. + /// + [JsonProperty("geoReplication", NullValueHandling = NullValueHandling.Ignore)] + public IList GeoReplication { get; set; } + + /// + /// Topic retention policy. + /// + [JsonProperty("retention", NullValueHandling = NullValueHandling.Ignore)] + public RetentionDefinition Retention { get; set; } + + /// + /// Message Time-to-live in seconds. + /// + [JsonProperty("ttl", NullValueHandling = NullValueHandling.Ignore)] + public int? TTL { get; set; } + + /// + /// When Message deduplication is enabled, it ensures that each message produced on Pulsar topics is persisted to disk only once. + /// + [JsonProperty("deduplication", NullValueHandling = NullValueHandling.Ignore)] + public bool? Deduplication { get; set; } + } + + public enum Persistence + { + [EnumMember(Value = "persistent")] + Persistent, + [EnumMember(Value = "non-persistent")] + NonPersistent, + } + + public class RetentionDefinition + { + /// + /// Time given in Minutes. 0 = Disable message retention (by default). + /// + [JsonProperty("time", NullValueHandling = NullValueHandling.Ignore)] + public int Time { get; set; } + + /// + /// Size given in MegaBytes. 0 = Disable message retention (by default). + /// + [JsonProperty("size", NullValueHandling = NullValueHandling.Ignore)] + public int Size { get; set; } + } +} diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarMessageBinding.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarMessageBinding.cs new file mode 100644 index 00000000..d8342c1d --- /dev/null +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarMessageBinding.cs @@ -0,0 +1,12 @@ +namespace Saunter.AsyncApiSchema.v2.Bindings.Pulsar +{ + /// + /// This object MUST NOT contain any properties. Its name is reserved for future use. + /// + /// + /// See: https://github.com/asyncapi/bindings/blob/master/pulsar/README.md#message-binding-object + /// + public class PulsarMessageBinding + { + } +} diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarOperationBinding.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarOperationBinding.cs new file mode 100644 index 00000000..48755b70 --- /dev/null +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarOperationBinding.cs @@ -0,0 +1,12 @@ +namespace Saunter.AsyncApiSchema.v2.Bindings.Pulsar +{ + /// + /// This object MUST NOT contain any properties. Its name is reserved for future use. + /// + /// + /// See: https://github.com/asyncapi/bindings/blob/master/pulsar/README.md#operation-binding-object + /// + public class PulsarOperationBinding + { + } +} diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs new file mode 100644 index 00000000..177e0475 --- /dev/null +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; + +namespace Saunter.AsyncApiSchema.v2.Bindings.Pulsar +{ + /// + /// See: https://github.com/asyncapi/bindings/tree/master/pulsar#server-binding-object + public class PulsarServerBinding + { + /// + /// The pulsar tenant. If omitted, "public" must be assumed. + /// + [JsonProperty("tenant", NullValueHandling = NullValueHandling.Ignore)] + public string Tenant { get; set; } + } +} diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/README.md b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/README.md new file mode 100644 index 00000000..263c8573 --- /dev/null +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/README.md @@ -0,0 +1 @@ +https://github.com/asyncapi/bindings/blob/master/pulsar/README.md \ No newline at end of file diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/ServerBindings.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/ServerBindings.cs index 7484fdec..4d5e996b 100644 --- a/src/Saunter/AsyncApiSchema/v2/Bindings/ServerBindings.cs +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/ServerBindings.cs @@ -3,6 +3,7 @@ using Saunter.AsyncApiSchema.v2.Bindings.Http; using Saunter.AsyncApiSchema.v2.Bindings.Kafka; using Saunter.AsyncApiSchema.v2.Bindings.Mqtt; +using Saunter.AsyncApiSchema.v2.Bindings.Pulsar; namespace Saunter.AsyncApiSchema.v2.Bindings { @@ -32,5 +33,8 @@ public class ServerBindings : IServerBindings [JsonProperty("mqtt", NullValueHandling = NullValueHandling.Ignore)] public MqttServerBinding Mqtt { get; set; } + + [JsonProperty("pulsar", NullValueHandling = NullValueHandling.Ignore)] + public PulsarServerBinding Pulsar { get; set; } } } From 8a11dcf51f3b56a439b6b88371a320e3eb0afa19 Mon Sep 17 00:00:00 2001 From: VisualBean Date: Tue, 23 Jul 2024 09:39:47 +0200 Subject: [PATCH 2/3] fix formatting issue --- .../DocumentGeneratorTests/InterfaceAttributeTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Saunter.Tests/Generation/DocumentGeneratorTests/InterfaceAttributeTests.cs b/test/Saunter.Tests/Generation/DocumentGeneratorTests/InterfaceAttributeTests.cs index a5183890..4fa225c8 100644 --- a/test/Saunter.Tests/Generation/DocumentGeneratorTests/InterfaceAttributeTests.cs +++ b/test/Saunter.Tests/Generation/DocumentGeneratorTests/InterfaceAttributeTests.cs @@ -3,13 +3,13 @@ // See the LICENSE file in the project root for more information. using System; +using System.Linq; using System.Reflection; using Saunter.AsyncApiSchema.v2; using Saunter.Attributes; using Saunter.Generation; using Shouldly; using Xunit; -using System.Linq; namespace Saunter.Tests.Generation.DocumentGeneratorTests { From 035b472c88fc2f220f4602e84d68599c62956869 Mon Sep 17 00:00:00 2001 From: Alex Wichmann Date: Tue, 23 Jul 2024 16:40:28 +0200 Subject: [PATCH 3/3] Update src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs --- .../AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs index 177e0475..af7b3c0c 100644 --- a/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs +++ b/src/Saunter/AsyncApiSchema/v2/Bindings/Pulsar/PulsarServerBinding.cs @@ -4,6 +4,7 @@ namespace Saunter.AsyncApiSchema.v2.Bindings.Pulsar { /// /// See: https://github.com/asyncapi/bindings/tree/master/pulsar#server-binding-object + /// public class PulsarServerBinding { ///