Skip to content
Draft
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
// <auto-generated/>

#nullable disable

using System;
using System.ClientModel;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;

namespace SampleTypeSpec
{
/// <summary> The Animal. </summary>
public partial class Animal : Dog, IJsonModel<Animal>
{
/// <summary> Initializes a new instance of <see cref="Animal"/> for deserialization. </summary>
internal Animal()
{
}

/// <param name="writer"> The JSON writer. </param>
/// <param name="options"> The client options for reading and writing models. </param>
void IJsonModel<Animal>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
writer.WriteStartObject();
JsonModelWriteCore(writer, options);
writer.WriteEndObject();
}

/// <param name="writer"> The JSON writer. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(Animal)} does not support writing '{format}' format.");
}
base.JsonModelWriteCore(writer, options);
if (Optional.IsDefined(Breed))
{
writer.WritePropertyName("breed"u8);
writer.WriteStringValue(Breed);
}
}

/// <param name="reader"> The JSON reader. </param>
/// <param name="options"> The client options for reading and writing models. </param>
Animal IJsonModel<Animal>.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (Animal)JsonModelCreateCore(ref reader, options);

/// <param name="reader"> The JSON reader. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected override Pet JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(Animal)} does not support reading '{format}' format.");
}
using JsonDocument document = JsonDocument.ParseValue(ref reader);
return DeserializeAnimal(document.RootElement, options);
}

/// <param name="element"> The JSON element to deserialize. </param>
/// <param name="options"> The client options for reading and writing models. </param>
internal static Animal DeserializeAnimal(JsonElement element, ModelReaderWriterOptions options)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string kind = default;
string name = default;
float? weight = default;
IDictionary<string, BinaryData> additionalBinaryDataProperties = new ChangeTrackingDictionary<string, BinaryData>();
string bark = default;
string breed = default;
foreach (var prop in element.EnumerateObject())
{
if (prop.NameEquals("kind"u8))
{
kind = prop.Value.GetString();
continue;
}
if (prop.NameEquals("name"u8))
{
name = prop.Value.GetString();
continue;
}
if (prop.NameEquals("weight"u8))
{
if (prop.Value.ValueKind == JsonValueKind.Null)
{
continue;
}
weight = prop.Value.GetSingle();
continue;
}
if (prop.NameEquals("bark"u8))
{
bark = prop.Value.GetString();
continue;
}
if (prop.NameEquals("breed"u8))
{
breed = prop.Value.GetString();
continue;
}
if (options.Format != "W")
{
additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText()));
}
}
return new Animal(
kind,
name,
weight,
additionalBinaryDataProperties,
bark,
breed);
}

/// <param name="options"> The client options for reading and writing models. </param>
BinaryData IPersistableModel<Animal>.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options);

/// <param name="options"> The client options for reading and writing models. </param>
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
return ModelReaderWriter.Write(this, options, SampleTypeSpecContext.Default);
default:
throw new FormatException($"The model {nameof(Animal)} does not support writing '{options.Format}' format.");
}
}

/// <param name="data"> The data to parse. </param>
/// <param name="options"> The client options for reading and writing models. </param>
Animal IPersistableModel<Animal>.Create(BinaryData data, ModelReaderWriterOptions options) => (Animal)PersistableModelCreateCore(data, options);

/// <param name="data"> The data to parse. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected override Pet PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
using (JsonDocument document = JsonDocument.Parse(data))
{
return DeserializeAnimal(document.RootElement, options);
}
default:
throw new FormatException($"The model {nameof(Animal)} does not support reading '{options.Format}' format.");
}
}

/// <param name="options"> The client options for reading and writing models. </param>
string IPersistableModel<Animal>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";

/// <param name="animal"> The <see cref="Animal"/> to serialize into <see cref="BinaryContent"/>. </param>
public static implicit operator BinaryContent(Animal animal)
{
if (animal == null)
{
return null;
}
return BinaryContent.Create(animal, ModelSerializationExtensions.WireOptions);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;

namespace SampleTypeSpec
{
/// <summary> The Animal. </summary>
public partial class Animal : Dog
{
/// <summary> Initializes a new instance of <see cref="Animal"/>. </summary>
/// <param name="name"></param>
/// <param name="bark"></param>
/// <exception cref="ArgumentNullException"> <paramref name="name"/> or <paramref name="bark"/> is null. </exception>
public Animal(string name, string bark) : base(name, bark)
{
Argument.AssertNotNull(name, nameof(name));
Argument.AssertNotNull(bark, nameof(bark));

}

/// <summary> Initializes a new instance of <see cref="Animal"/>. </summary>
/// <param name="kind"> Discriminator property for Pet. </param>
/// <param name="name"></param>
/// <param name="weight"></param>
/// <param name="additionalBinaryDataProperties"> Keeps track of any properties unknown to the library. </param>
/// <param name="bark"></param>
/// <param name="breed"></param>
internal Animal(string kind, string name, float? weight, IDictionary<string, BinaryData> additionalBinaryDataProperties, string bark, string breed) : base(kind, name, weight, additionalBinaryDataProperties, bark)
{
Breed = breed;
}

/// <summary> Gets or sets the Breed. </summary>
public string Breed { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
// <auto-generated/>

#nullable disable

using System;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text.Json;

namespace SampleTypeSpec
{
/// <summary> The BaseModel. </summary>
public partial class BaseModel : IJsonModel<BaseModel>
{
/// <summary> Initializes a new instance of <see cref="BaseModel"/> for deserialization. </summary>
internal BaseModel()
{
}

/// <param name="writer"> The JSON writer. </param>
/// <param name="options"> The client options for reading and writing models. </param>
void IJsonModel<BaseModel>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
writer.WriteStartObject();
JsonModelWriteCore(writer, options);
writer.WriteEndObject();
}

/// <param name="writer"> The JSON writer. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(BaseModel)} does not support writing '{format}' format.");
}
writer.WritePropertyName("name"u8);
writer.WriteStringValue(Name);
if (options.Format != "W" && _additionalBinaryDataProperties != null)
{
foreach (var item in _additionalBinaryDataProperties)
{
writer.WritePropertyName(item.Key);
#if NET6_0_OR_GREATER
writer.WriteRawValue(item.Value);
#else
using (JsonDocument document = JsonDocument.Parse(item.Value))
{
JsonSerializer.Serialize(writer, document.RootElement);
}
#endif
}
}
}

/// <param name="reader"> The JSON reader. </param>
/// <param name="options"> The client options for reading and writing models. </param>
BaseModel IJsonModel<BaseModel>.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options);

/// <param name="reader"> The JSON reader. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected virtual BaseModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(BaseModel)} does not support reading '{format}' format.");
}
using JsonDocument document = JsonDocument.ParseValue(ref reader);
return DeserializeBaseModel(document.RootElement, options);
}

/// <param name="element"> The JSON element to deserialize. </param>
/// <param name="options"> The client options for reading and writing models. </param>
internal static BaseModel DeserializeBaseModel(JsonElement element, ModelReaderWriterOptions options)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
string name = default;
IDictionary<string, BinaryData> additionalBinaryDataProperties = new ChangeTrackingDictionary<string, BinaryData>();
foreach (var prop in element.EnumerateObject())
{
if (prop.NameEquals("name"u8))
{
name = prop.Value.GetString();
continue;
}
if (options.Format != "W")
{
additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText()));
}
}
return new BaseModel(name, additionalBinaryDataProperties);
}

/// <param name="options"> The client options for reading and writing models. </param>
BinaryData IPersistableModel<BaseModel>.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options);

/// <param name="options"> The client options for reading and writing models. </param>
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
return ModelReaderWriter.Write(this, options, SampleTypeSpecContext.Default);
default:
throw new FormatException($"The model {nameof(BaseModel)} does not support writing '{options.Format}' format.");
}
}

/// <param name="data"> The data to parse. </param>
/// <param name="options"> The client options for reading and writing models. </param>
BaseModel IPersistableModel<BaseModel>.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options);

/// <param name="data"> The data to parse. </param>
/// <param name="options"> The client options for reading and writing models. </param>
protected virtual BaseModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
using (JsonDocument document = JsonDocument.Parse(data))
{
return DeserializeBaseModel(document.RootElement, options);
}
default:
throw new FormatException($"The model {nameof(BaseModel)} does not support reading '{options.Format}' format.");
}
}

/// <param name="options"> The client options for reading and writing models. </param>
string IPersistableModel<BaseModel>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;

namespace SampleTypeSpec
{
/// <summary> The BaseModel. </summary>
public partial class BaseModel
{
/// <summary> Keeps track of any properties unknown to the library. </summary>
private protected readonly IDictionary<string, BinaryData> _additionalBinaryDataProperties;

/// <summary> Initializes a new instance of <see cref="BaseModel"/>. </summary>
/// <param name="name"></param>
/// <exception cref="ArgumentNullException"> <paramref name="name"/> is null. </exception>
public BaseModel(string name)
{
Argument.AssertNotNull(name, nameof(name));

Name = name;
}

/// <summary> Initializes a new instance of <see cref="BaseModel"/>. </summary>
/// <param name="name"></param>
/// <param name="additionalBinaryDataProperties"> Keeps track of any properties unknown to the library. </param>
internal BaseModel(string name, IDictionary<string, BinaryData> additionalBinaryDataProperties)
{
Name = name;
_additionalBinaryDataProperties = additionalBinaryDataProperties;
}

/// <summary> Gets or sets the Name. </summary>
public string Name { get; set; }
}
}
Loading