Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions src/ByteBard.AsyncAPI.Bindings/MQTT/MQTTMessageBinding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,9 @@ public class MQTTMessageBinding : MessageBinding<MQTTMessageBinding>

/// <summary>
/// The topic (channel URI) for a response message.
/// Either an <see cref="MQTTString"/> or an <see cref="MQTTStringSchema"/>.
/// </summary>
public string ResponseTopic
{
get => this.ResponseTopicValue?.Value;
set => this.ResponseTopicValue = value == null ? null : MQTTStringOrSchema.FromString(value);
}

/// <summary>The string-or-schema response topic value.</summary>
public MQTTStringOrSchema ResponseTopicValue { get; set; }
public MQTTStringOrSchema ResponseTopic { get; set; }

/// <summary>
/// Writes the MQTT message binding object and its extensions for AsyncAPI 2.0.
Expand All @@ -61,7 +55,7 @@ public override void SerializeV3(IAsyncApiWriter writer)
/// <summary>
/// Writes the MQTT message binding object and its extensions for AsyncAPI 3.0.
/// </summary>
/// <remarks>ResponseTopicValue is written as a string or schema; nested schemas use AsyncAPI 3.0 serialization.</remarks>
/// <remarks>ResponseTopic is written as a string or schema; nested schemas use AsyncAPI 3.0 serialization.</remarks>
/// <exception cref="ArgumentNullException"><paramref name="writer"/> is null.</exception>
public override void SerializeProperties(IAsyncApiWriter writer)
{
Expand All @@ -85,8 +79,12 @@ private void SerializeProperties(IAsyncApiWriter writer, AsyncApiVersion version
writer.WriteOptionalProperty("payloadFormatIndicator", this.PayloadFormatIndicator);
writer.WriteOptionalObject("correlationData", this.CorrelationData, (w, h) => { if (version == AsyncApiVersion.AsyncApi2_0) h.SerializeV2(w); else h.SerializeV3(w); });
writer.WriteOptionalProperty("contentType", this.ContentType);
if (this.ResponseTopicValue?.Value != null) writer.WriteOptionalProperty("responseTopic", this.ResponseTopicValue.Value);
else if (this.ResponseTopicValue?.Schema != null) writer.WriteOptionalObject("responseTopic", this.ResponseTopicValue.Schema, (w, schema) => { if (version == AsyncApiVersion.AsyncApi2_0) schema.SerializeV2(w); else schema.SerializeV3(w); });
if (this.ResponseTopic != null)
{
writer.WritePropertyName("responseTopic");
this.ResponseTopic.Serialize(writer, version);
}

writer.WriteOptionalProperty("bindingVersion", this.BindingVersion);
writer.WriteExtensions(this.Extensions);
writer.WriteEndObject();
Expand All @@ -100,7 +98,7 @@ private void SerializeProperties(IAsyncApiWriter writer, AsyncApiVersion version
{ "payloadFormatIndicator", (a, n) => { a.PayloadFormatIndicator = n.GetIntegerValue(); } },
{ "correlationData", (a, n) => { a.CorrelationData = AsyncApiJsonSchemaDeserializer.LoadSchema(n); } },
{ "contentType", (a, n) => { a.ContentType = n.GetScalarValue(); } },
{ "responseTopic", (a, n) => { a.ResponseTopicValue = MQTTStringOrSchema.Parse(n); } },
{ "responseTopic", (a, n) => { a.ResponseTopic = MQTTStringOrSchema.Parse(n); } },
};
}
}
22 changes: 8 additions & 14 deletions src/ByteBard.AsyncAPI.Bindings/MQTT/MQTTOperationBinding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,9 @@ public bool Retain

/// <summary>
/// Interval in seconds or a Schema Object containing the definition of the lifetime of the message.
/// Either an <see cref="MQTTInteger"/> or an <see cref="MQTTIntegerSchema"/>.
/// </summary>
public int? MessageExpiryInterval
{
get => this.MessageExpiryIntervalValue?.Integer;
set => this.MessageExpiryIntervalValue = value.HasValue ? MQTTIntegerOrSchema.FromInteger(value.Value) : null;
}

/// <summary>The integer-or-schema message expiry interval value.</summary>
public MQTTIntegerOrSchema MessageExpiryIntervalValue { get; set; }
public MQTTIntegerOrSchema MessageExpiryInterval { get; set; }

public override string BindingKey => "mqtt";

Expand All @@ -51,7 +45,7 @@ public int? MessageExpiryInterval
{ "bindingVersion", (a, n) => { a.BindingVersion = n.GetScalarValue(); } },
{ "qos", (a, n) => { a.QoS = n.GetIntegerValue(); } },
{ "retain", (a, n) => { a.Retain = n.GetBooleanValue(); } },
{ "messageExpiryInterval", (a, n) => { a.MessageExpiryIntervalValue = MQTTIntegerOrSchema.Parse(n); } },
{ "messageExpiryInterval", (a, n) => { a.MessageExpiryInterval = MQTTIntegerOrSchema.Parse(n); } },
};

/// <summary>
Expand Down Expand Up @@ -98,12 +92,12 @@ private void SerializeProperties(IAsyncApiWriter writer, AsyncApiVersion version
writer.WriteStartObject();
writer.WriteOptionalProperty("qos", this.qos);
writer.WriteOptionalProperty("retain", this.retain);
if (this.MessageExpiryIntervalValue?.LongInteger is long integer) writer.WriteRequiredProperty("messageExpiryInterval", integer);
else if (this.MessageExpiryIntervalValue?.Schema != null) writer.WriteOptionalObject("messageExpiryInterval", this.MessageExpiryIntervalValue.Schema, (w, schema) =>
if (this.MessageExpiryInterval != null)
{
if (version == AsyncApiVersion.AsyncApi2_0) schema.SerializeV2(w);
else schema.SerializeV3(w);
});
writer.WritePropertyName("messageExpiryInterval");
this.MessageExpiryInterval.Serialize(writer, version);
}

writer.WriteOptionalProperty("bindingVersion", this.BindingVersion);
writer.WriteExtensions(this.Extensions);
writer.WriteEndObject();
Expand Down
39 changes: 14 additions & 25 deletions src/ByteBard.AsyncAPI.Bindings/MQTT/MQTTServerBinding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,28 +36,16 @@ public class MQTTServerBinding : ServerBinding<MQTTServerBinding>
/// <summary>
/// Interval in seconds the broker maintains a session
/// for a disconnected client until this interval expires.
/// Either an <see cref="MQTTInteger"/> or an <see cref="MQTTIntegerSchema"/>.
/// </summary>
public int? SessionExpiryInterval
{
get => this.SessionExpiryIntervalValue?.Integer;
set => this.SessionExpiryIntervalValue = value.HasValue ? MQTTIntegerOrSchema.FromInteger(value.Value) : null;
}

/// <summary>The integer-or-schema session expiry interval value.</summary>
public MQTTIntegerOrSchema SessionExpiryIntervalValue { get; set; }
public MQTTIntegerOrSchema SessionExpiryInterval { get; set; }

/// <summary>
/// Number of bytes representing the maximum packet size
/// the client is willing to accept.
/// Either an <see cref="MQTTInteger"/> or an <see cref="MQTTIntegerSchema"/>.
/// </summary>
public int? MaximumPacketSize
{
get => this.MaximumPacketSizeValue?.Integer;
set => this.MaximumPacketSizeValue = value.HasValue ? MQTTIntegerOrSchema.FromInteger(value.Value) : null;
}

/// <summary>The integer-or-schema maximum packet size value.</summary>
public MQTTIntegerOrSchema MaximumPacketSizeValue { get; set; }
public MQTTIntegerOrSchema MaximumPacketSize { get; set; }

public override string BindingKey => "mqtt";

Expand All @@ -68,8 +56,8 @@ public int? MaximumPacketSize
{ "cleanSession", (a, n) => { a.CleanSession = n.GetBooleanValue(); } },
{ "lastWill", (a, n) => { a.LastWill = n.ParseMap(LastWillFixedFields); } },
{ "keepAlive", (a, n) => { a.KeepAlive = n.GetIntegerValue(); } },
{ "sessionExpiryInterval", (a, n) => { a.SessionExpiryIntervalValue = MQTTIntegerOrSchema.Parse(n); } },
{ "maximumPacketSize", (a, n) => { a.MaximumPacketSizeValue = MQTTIntegerOrSchema.Parse(n); } },
{ "sessionExpiryInterval", (a, n) => { a.SessionExpiryInterval = MQTTIntegerOrSchema.Parse(n); } },
{ "maximumPacketSize", (a, n) => { a.MaximumPacketSize = MQTTIntegerOrSchema.Parse(n); } },
};

private static FixedFieldMap<LastWill> LastWillFixedFields = new()
Expand Down Expand Up @@ -126,8 +114,8 @@ private void SerializeProperties(IAsyncApiWriter writer, AsyncApiVersion version
writer.WriteOptionalProperty("cleanSession", this.CleanSession);
writer.WriteOptionalObject("lastWill", this.LastWill, (w, l) => l.Serialize(w));
writer.WriteOptionalProperty("keepAlive", this.KeepAlive);
this.WriteIntegerOrSchema(writer, "sessionExpiryInterval", this.SessionExpiryIntervalValue, version);
this.WriteIntegerOrSchema(writer, "maximumPacketSize", this.MaximumPacketSizeValue, version);
this.WriteIntegerOrSchema(writer, "sessionExpiryInterval", this.SessionExpiryInterval, version);
this.WriteIntegerOrSchema(writer, "maximumPacketSize", this.MaximumPacketSize, version);
writer.WriteOptionalProperty(AsyncApiConstants.BindingVersion, this.BindingVersion);
writer.WriteExtensions(this.Extensions);
writer.WriteEndObject();
Expand All @@ -143,12 +131,13 @@ private void SerializeProperties(IAsyncApiWriter writer, AsyncApiVersion version
/// <exception cref="ArgumentNullException">A value is present and <paramref name="writer"/> or <paramref name="name"/> is null.</exception>
private void WriteIntegerOrSchema(IAsyncApiWriter writer, string name, MQTTIntegerOrSchema value, AsyncApiVersion version)
{
if (value?.LongInteger is long integer) writer.WriteRequiredProperty(name, integer);
else if (value?.Schema != null) writer.WriteOptionalObject(name, value.Schema, (w, schema) =>
if (value == null)
{
if (version == AsyncApiVersion.AsyncApi2_0) schema.SerializeV2(w);
else schema.SerializeV3(w);
});
return;
}

writer.WritePropertyName(name);
value.Serialize(writer, version);
}
}
}
Loading
Loading