Skip to content

Commit

Permalink
fix: add ability to have 'false' as the value for 'additionalproperti…
Browse files Browse the repository at this point in the history
…es' (#118)

Co-authored-by: UlrikSandberg <[email protected]>
  • Loading branch information
VisualBean and UlrikSandberg authored Jun 29, 2023
1 parent bc1569a commit 9e4867f
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 4 deletions.
12 changes: 11 additions & 1 deletion src/LEGO.AsyncAPI.Readers/V2/AsyncApiSchemaDeserializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,17 @@ public class JsonSchemaDeserializer
"properties", (a, n) => { a.Properties = n.CreateMap(LoadSchema); }
},
{
"additionalProperties", (a, n) => { a.AdditionalProperties = LoadSchema(n); }
"additionalProperties", (a, n) =>
{
if (n.GetBooleanValueOrDefault(null) == false)
{
a.AdditionalProperties = new NoAdditionalProperties();
}
else
{
a.AdditionalProperties = LoadSchema(n);
}
}
},
{
"items", (a, n) => { a.Items = LoadSchema(n); }
Expand Down
9 changes: 8 additions & 1 deletion src/LEGO.AsyncAPI/Models/AsyncApiSchema.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,14 @@ public void SerializeV2WithoutReference(IAsyncApiWriter writer)
writer.WriteOptionalProperty(AsyncApiConstants.MinProperties, this.MinProperties);

// additionalProperties
writer.WriteOptionalObject(AsyncApiConstants.AdditionalProperties, this.AdditionalProperties, (w, s) => s.SerializeV2(w));
if (this.AdditionalProperties is NoAdditionalProperties)
{
writer.WriteOptionalProperty<bool>(AsyncApiConstants.AdditionalProperties, false);
}
else
{
writer.WriteOptionalObject(AsyncApiConstants.AdditionalProperties, this.AdditionalProperties, (w, s) => s.SerializeV2(w));
}

// discriminator
writer.WriteOptionalProperty(AsyncApiConstants.Discriminator, this.Discriminator);
Expand Down
12 changes: 12 additions & 0 deletions src/LEGO.AsyncAPI/Models/JsonSchema/NoAdditionalProperties.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright (c) The LEGO Group. All rights reserved.

namespace LEGO.AsyncAPI.Models
{
/// <summary>
/// An object representing 'false' for the 'additionalProperties' property of AsyncApiSchema.
/// </summary>
/// <seealso cref="AsyncApiSchema" />
public class NoAdditionalProperties : AsyncApiSchema
{
}
}
6 changes: 4 additions & 2 deletions test/LEGO.AsyncAPI.Tests/Models/AsyncApiSchema_Should.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public class AsyncApiSchema_Should
MaxLength = 15,
},
},
AdditionalProperties = new NoAdditionalProperties(),
},
["property4"] = new AsyncApiSchema
{
Expand All @@ -78,7 +79,7 @@ public class AsyncApiSchema_Should
{
["property6"] = new AsyncApiSchema
{
Type = SchemaType.Boolean ,
Type = SchemaType.Boolean,
},
},
},
Expand Down Expand Up @@ -376,7 +377,8 @@ public void SerializeAsJson_WithAdvancedSchemaObject_V2Works()
""type"": ""string"",
""maxLength"": 15
}
}
},
""additionalProperties"": false
},
""property4"": {
""properties"": {
Expand Down

0 comments on commit 9e4867f

Please sign in to comment.