Skip to content

Commit ec9095c

Browse files
only propogate to discriminated types
1 parent 0f15f22 commit ec9095c

File tree

47 files changed

+3791
-1002
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3791
-1002
lines changed
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
// <auto-generated/>
2+
3+
#nullable disable
4+
5+
using System;
6+
using System.ClientModel;
7+
using System.ClientModel.Primitives;
8+
using System.Collections.Generic;
9+
using System.Text.Json;
10+
11+
namespace SampleTypeSpec
12+
{
13+
/// <summary> The Animal. </summary>
14+
public partial class Animal : Dog, IJsonModel<Animal>
15+
{
16+
/// <summary> Initializes a new instance of <see cref="Animal"/> for deserialization. </summary>
17+
internal Animal()
18+
{
19+
}
20+
21+
/// <param name="writer"> The JSON writer. </param>
22+
/// <param name="options"> The client options for reading and writing models. </param>
23+
void IJsonModel<Animal>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
24+
{
25+
writer.WriteStartObject();
26+
JsonModelWriteCore(writer, options);
27+
writer.WriteEndObject();
28+
}
29+
30+
/// <param name="writer"> The JSON writer. </param>
31+
/// <param name="options"> The client options for reading and writing models. </param>
32+
protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
33+
{
34+
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
35+
if (format != "J")
36+
{
37+
throw new FormatException($"The model {nameof(Animal)} does not support writing '{format}' format.");
38+
}
39+
base.JsonModelWriteCore(writer, options);
40+
if (Optional.IsDefined(Breed))
41+
{
42+
writer.WritePropertyName("breed"u8);
43+
writer.WriteStringValue(Breed);
44+
}
45+
}
46+
47+
/// <param name="reader"> The JSON reader. </param>
48+
/// <param name="options"> The client options for reading and writing models. </param>
49+
Animal IJsonModel<Animal>.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (Animal)JsonModelCreateCore(ref reader, options);
50+
51+
/// <param name="reader"> The JSON reader. </param>
52+
/// <param name="options"> The client options for reading and writing models. </param>
53+
protected override Pet JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
54+
{
55+
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
56+
if (format != "J")
57+
{
58+
throw new FormatException($"The model {nameof(Animal)} does not support reading '{format}' format.");
59+
}
60+
using JsonDocument document = JsonDocument.ParseValue(ref reader);
61+
return DeserializeAnimal(document.RootElement, options);
62+
}
63+
64+
/// <param name="element"> The JSON element to deserialize. </param>
65+
/// <param name="options"> The client options for reading and writing models. </param>
66+
internal static Animal DeserializeAnimal(JsonElement element, ModelReaderWriterOptions options)
67+
{
68+
if (element.ValueKind == JsonValueKind.Null)
69+
{
70+
return null;
71+
}
72+
string kind = default;
73+
string name = default;
74+
float? weight = default;
75+
IDictionary<string, BinaryData> additionalBinaryDataProperties = new ChangeTrackingDictionary<string, BinaryData>();
76+
string bark = default;
77+
string breed = default;
78+
foreach (var prop in element.EnumerateObject())
79+
{
80+
if (prop.NameEquals("kind"u8))
81+
{
82+
kind = prop.Value.GetString();
83+
continue;
84+
}
85+
if (prop.NameEquals("name"u8))
86+
{
87+
name = prop.Value.GetString();
88+
continue;
89+
}
90+
if (prop.NameEquals("weight"u8))
91+
{
92+
if (prop.Value.ValueKind == JsonValueKind.Null)
93+
{
94+
continue;
95+
}
96+
weight = prop.Value.GetSingle();
97+
continue;
98+
}
99+
if (prop.NameEquals("bark"u8))
100+
{
101+
bark = prop.Value.GetString();
102+
continue;
103+
}
104+
if (prop.NameEquals("breed"u8))
105+
{
106+
breed = prop.Value.GetString();
107+
continue;
108+
}
109+
if (options.Format != "W")
110+
{
111+
additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText()));
112+
}
113+
}
114+
return new Animal(
115+
kind,
116+
name,
117+
weight,
118+
additionalBinaryDataProperties,
119+
bark,
120+
breed);
121+
}
122+
123+
/// <param name="options"> The client options for reading and writing models. </param>
124+
BinaryData IPersistableModel<Animal>.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options);
125+
126+
/// <param name="options"> The client options for reading and writing models. </param>
127+
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options)
128+
{
129+
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
130+
switch (format)
131+
{
132+
case "J":
133+
return ModelReaderWriter.Write(this, options, SampleTypeSpecContext.Default);
134+
default:
135+
throw new FormatException($"The model {nameof(Animal)} does not support writing '{options.Format}' format.");
136+
}
137+
}
138+
139+
/// <param name="data"> The data to parse. </param>
140+
/// <param name="options"> The client options for reading and writing models. </param>
141+
Animal IPersistableModel<Animal>.Create(BinaryData data, ModelReaderWriterOptions options) => (Animal)PersistableModelCreateCore(data, options);
142+
143+
/// <param name="data"> The data to parse. </param>
144+
/// <param name="options"> The client options for reading and writing models. </param>
145+
protected override Pet PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
146+
{
147+
string format = options.Format == "W" ? ((IPersistableModel<Animal>)this).GetFormatFromOptions(options) : options.Format;
148+
switch (format)
149+
{
150+
case "J":
151+
using (JsonDocument document = JsonDocument.Parse(data))
152+
{
153+
return DeserializeAnimal(document.RootElement, options);
154+
}
155+
default:
156+
throw new FormatException($"The model {nameof(Animal)} does not support reading '{options.Format}' format.");
157+
}
158+
}
159+
160+
/// <param name="options"> The client options for reading and writing models. </param>
161+
string IPersistableModel<Animal>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
162+
163+
/// <param name="animal"> The <see cref="Animal"/> to serialize into <see cref="BinaryContent"/>. </param>
164+
public static implicit operator BinaryContent(Animal animal)
165+
{
166+
if (animal == null)
167+
{
168+
return null;
169+
}
170+
return BinaryContent.Create(animal, ModelSerializationExtensions.WireOptions);
171+
}
172+
}
173+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// <auto-generated/>
2+
3+
#nullable disable
4+
5+
using System;
6+
using System.Collections.Generic;
7+
8+
namespace SampleTypeSpec
9+
{
10+
/// <summary> The Animal. </summary>
11+
public partial class Animal : Dog
12+
{
13+
/// <summary> Initializes a new instance of <see cref="Animal"/>. </summary>
14+
/// <param name="name"></param>
15+
/// <param name="bark"></param>
16+
/// <exception cref="ArgumentNullException"> <paramref name="name"/> or <paramref name="bark"/> is null. </exception>
17+
public Animal(string name, string bark) : base(name, bark)
18+
{
19+
Argument.AssertNotNull(name, nameof(name));
20+
Argument.AssertNotNull(bark, nameof(bark));
21+
22+
}
23+
24+
/// <summary> Initializes a new instance of <see cref="Animal"/>. </summary>
25+
/// <param name="kind"> Discriminator property for Pet. </param>
26+
/// <param name="name"></param>
27+
/// <param name="weight"></param>
28+
/// <param name="additionalBinaryDataProperties"> Keeps track of any properties unknown to the library. </param>
29+
/// <param name="bark"></param>
30+
/// <param name="breed"></param>
31+
internal Animal(string kind, string name, float? weight, IDictionary<string, BinaryData> additionalBinaryDataProperties, string bark, string breed) : base(kind, name, weight, additionalBinaryDataProperties, bark)
32+
{
33+
Breed = breed;
34+
}
35+
36+
/// <summary> Gets or sets the Breed. </summary>
37+
public string Breed { get; set; }
38+
}
39+
}
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@
99

1010
namespace SampleTypeSpec
1111
{
12-
/// <summary> The ImplicitDynamicModel. </summary>
13-
public partial class ImplicitDynamicModel : IJsonModel<ImplicitDynamicModel>
12+
/// <summary> The BaseModel. </summary>
13+
public partial class BaseModel : IJsonModel<BaseModel>
1414
{
15-
/// <summary> Initializes a new instance of <see cref="ImplicitDynamicModel"/> for deserialization. </summary>
16-
internal ImplicitDynamicModel()
15+
/// <summary> Initializes a new instance of <see cref="BaseModel"/> for deserialization. </summary>
16+
internal BaseModel()
1717
{
1818
}
1919

2020
/// <param name="writer"> The JSON writer. </param>
2121
/// <param name="options"> The client options for reading and writing models. </param>
22-
void IJsonModel<ImplicitDynamicModel>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
22+
void IJsonModel<BaseModel>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
2323
{
2424
writer.WriteStartObject();
2525
JsonModelWriteCore(writer, options);
@@ -30,10 +30,10 @@ void IJsonModel<ImplicitDynamicModel>.Write(Utf8JsonWriter writer, ModelReaderWr
3030
/// <param name="options"> The client options for reading and writing models. </param>
3131
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
3232
{
33-
string format = options.Format == "W" ? ((IPersistableModel<ImplicitDynamicModel>)this).GetFormatFromOptions(options) : options.Format;
33+
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
3434
if (format != "J")
3535
{
36-
throw new FormatException($"The model {nameof(ImplicitDynamicModel)} does not support writing '{format}' format.");
36+
throw new FormatException($"The model {nameof(BaseModel)} does not support writing '{format}' format.");
3737
}
3838
writer.WritePropertyName("name"u8);
3939
writer.WriteStringValue(Name);
@@ -56,24 +56,24 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit
5656

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

6161
/// <param name="reader"> The JSON reader. </param>
6262
/// <param name="options"> The client options for reading and writing models. </param>
63-
protected virtual ImplicitDynamicModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
63+
protected virtual BaseModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
6464
{
65-
string format = options.Format == "W" ? ((IPersistableModel<ImplicitDynamicModel>)this).GetFormatFromOptions(options) : options.Format;
65+
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
6666
if (format != "J")
6767
{
68-
throw new FormatException($"The model {nameof(ImplicitDynamicModel)} does not support reading '{format}' format.");
68+
throw new FormatException($"The model {nameof(BaseModel)} does not support reading '{format}' format.");
6969
}
7070
using JsonDocument document = JsonDocument.ParseValue(ref reader);
71-
return DeserializeImplicitDynamicModel(document.RootElement, options);
71+
return DeserializeBaseModel(document.RootElement, options);
7272
}
7373

7474
/// <param name="element"> The JSON element to deserialize. </param>
7575
/// <param name="options"> The client options for reading and writing models. </param>
76-
internal static ImplicitDynamicModel DeserializeImplicitDynamicModel(JsonElement element, ModelReaderWriterOptions options)
76+
internal static BaseModel DeserializeBaseModel(JsonElement element, ModelReaderWriterOptions options)
7777
{
7878
if (element.ValueKind == JsonValueKind.Null)
7979
{
@@ -93,47 +93,47 @@ internal static ImplicitDynamicModel DeserializeImplicitDynamicModel(JsonElement
9393
additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText()));
9494
}
9595
}
96-
return new ImplicitDynamicModel(name, additionalBinaryDataProperties);
96+
return new BaseModel(name, additionalBinaryDataProperties);
9797
}
9898

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

102102
/// <param name="options"> The client options for reading and writing models. </param>
103103
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options)
104104
{
105-
string format = options.Format == "W" ? ((IPersistableModel<ImplicitDynamicModel>)this).GetFormatFromOptions(options) : options.Format;
105+
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
106106
switch (format)
107107
{
108108
case "J":
109109
return ModelReaderWriter.Write(this, options, SampleTypeSpecContext.Default);
110110
default:
111-
throw new FormatException($"The model {nameof(ImplicitDynamicModel)} does not support writing '{options.Format}' format.");
111+
throw new FormatException($"The model {nameof(BaseModel)} does not support writing '{options.Format}' format.");
112112
}
113113
}
114114

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

119119
/// <param name="data"> The data to parse. </param>
120120
/// <param name="options"> The client options for reading and writing models. </param>
121-
protected virtual ImplicitDynamicModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
121+
protected virtual BaseModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
122122
{
123-
string format = options.Format == "W" ? ((IPersistableModel<ImplicitDynamicModel>)this).GetFormatFromOptions(options) : options.Format;
123+
string format = options.Format == "W" ? ((IPersistableModel<BaseModel>)this).GetFormatFromOptions(options) : options.Format;
124124
switch (format)
125125
{
126126
case "J":
127127
using (JsonDocument document = JsonDocument.Parse(data))
128128
{
129-
return DeserializeImplicitDynamicModel(document.RootElement, options);
129+
return DeserializeBaseModel(document.RootElement, options);
130130
}
131131
default:
132-
throw new FormatException($"The model {nameof(ImplicitDynamicModel)} does not support reading '{options.Format}' format.");
132+
throw new FormatException($"The model {nameof(BaseModel)} does not support reading '{options.Format}' format.");
133133
}
134134
}
135135

136136
/// <param name="options"> The client options for reading and writing models. </param>
137-
string IPersistableModel<ImplicitDynamicModel>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
137+
string IPersistableModel<BaseModel>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
138138
}
139139
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,32 @@
77

88
namespace SampleTypeSpec
99
{
10-
/// <summary> The ImplicitDynamicModel. </summary>
11-
public partial class ImplicitDynamicModel
10+
/// <summary> The BaseModel. </summary>
11+
public partial class BaseModel
1212
{
1313
/// <summary> Keeps track of any properties unknown to the library. </summary>
1414
private protected readonly IDictionary<string, BinaryData> _additionalBinaryDataProperties;
1515

16-
/// <summary> Initializes a new instance of <see cref="ImplicitDynamicModel"/>. </summary>
16+
/// <summary> Initializes a new instance of <see cref="BaseModel"/>. </summary>
1717
/// <param name="name"></param>
1818
/// <exception cref="ArgumentNullException"> <paramref name="name"/> is null. </exception>
19-
public ImplicitDynamicModel(string name)
19+
public BaseModel(string name)
2020
{
2121
Argument.AssertNotNull(name, nameof(name));
2222

2323
Name = name;
2424
}
2525

26-
/// <summary> Initializes a new instance of <see cref="ImplicitDynamicModel"/>. </summary>
26+
/// <summary> Initializes a new instance of <see cref="BaseModel"/>. </summary>
2727
/// <param name="name"></param>
2828
/// <param name="additionalBinaryDataProperties"> Keeps track of any properties unknown to the library. </param>
29-
internal ImplicitDynamicModel(string name, IDictionary<string, BinaryData> additionalBinaryDataProperties)
29+
internal BaseModel(string name, IDictionary<string, BinaryData> additionalBinaryDataProperties)
3030
{
3131
Name = name;
3232
_additionalBinaryDataProperties = additionalBinaryDataProperties;
3333
}
3434

35-
/// <summary> Gets the Name. </summary>
36-
public string Name { get; }
35+
/// <summary> Gets or sets the Name. </summary>
36+
public string Name { get; set; }
3737
}
3838
}

0 commit comments

Comments
 (0)