csharp/Microsoft.Azure.Databricks.Client/Converters/TableConstraintConverter.cs (43 lines of code) (raw):

using Microsoft.Azure.Databricks.Client.Models; using Microsoft.Azure.Databricks.Client.Models.UnityCatalog; using System; using System.Text.Json.Nodes; using System.Text.Json; using System.Text.Json.Serialization; namespace Microsoft.Azure.Databricks.Client.Converters; public class TableConstraintConverter : JsonConverter<TableConstraint> { public override bool CanConvert(Type typeToConvert) { return typeof(TableConstraint).IsAssignableFrom(typeToConvert); } public override bool HandleNull => true; public override TableConstraint Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var tableConstraint = JsonNode.Parse(ref reader)!.AsObject(); if (tableConstraint.TryGetPropertyValue("primary_key_constraint", out _)) { return tableConstraint.Deserialize<PrimaryKeyTableConstraint>(); } if (tableConstraint.TryGetPropertyValue("foreign_key_constraint", out _)) { return tableConstraint.Deserialize<ForeignKeyTableConstraint>(); } if (tableConstraint.TryGetPropertyValue("named_table_constraint", out _)) { return tableConstraint.Deserialize<NamedTableConstraint>(); } throw new NotSupportedException("Table constraint not recognized."); } public override void Write(Utf8JsonWriter writer, TableConstraint value, JsonSerializerOptions options) { var node = value switch { PrimaryKeyTableConstraint pk => JsonSerializer.SerializeToNode(pk), ForeignKeyTableConstraint fk => JsonSerializer.SerializeToNode(fk), NamedTableConstraint nam => JsonSerializer.SerializeToNode(nam), _ => throw new NotImplementedException($"JsonConverter not implemented for type {value.GetType()}") }; node!.WriteTo(writer); } }