Skip to content

Commit

Permalink
Support inline oneOf discriminated properties
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Jan 18, 2024
1 parent 68494ac commit 5fa58d2
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions Bonsai.Sgen/JsonSchemaExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,41 @@ public static JsonSchema WithUniqueDiscriminatorProperties(this JsonSchema schem

class DiscriminatorSchemaVisitor : JsonSchemaVisitorBase
{
public DiscriminatorSchemaVisitor(object rootObject)
public DiscriminatorSchemaVisitor(JsonSchema rootObject)
{
RootObject = rootObject;
}

public object RootObject { get; }
public JsonSchema RootObject { get; }

protected override JsonSchema VisitSchema(JsonSchema schema, string path, string typeNameHint)
{
if (schema.DiscriminatorObject != null)
{
if (schema is JsonSchemaProperty schemaProperty)
{
if (!RootObject.Definitions.ContainsKey(typeNameHint))
{
var discriminatorSchema = new JsonSchema();
discriminatorSchema.DiscriminatorObject = schemaProperty.DiscriminatorObject;
discriminatorSchema.IsAbstract = schemaProperty.IsAbstract;
foreach (var derivedSchema in schemaProperty.OneOf)
{
if (derivedSchema.IsNullable(SchemaType.JsonSchema))
{
continue;
}

derivedSchema.ActualSchema.AllOf.Add(new JsonSchema { Reference = discriminatorSchema });
}
RootObject.Definitions.Add(typeNameHint, discriminatorSchema);
}

schemaProperty.DiscriminatorObject = null;
schemaProperty.IsAbstract = false;
return schema;
}

foreach (var derivedSchema in schema.GetDerivedSchemas(RootObject).Keys)
{
foreach (var property in derivedSchema.Properties.Keys.ToList())
Expand Down

0 comments on commit 5fa58d2

Please sign in to comment.