sdk/sqlmanagement/Azure.ResourceManager.Sql/src/Custom/ServiceObjectiveData.Serialization.cs (362 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#nullable disable
using System;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;
using Azure.Core;
using Azure.ResourceManager.Models;
namespace Azure.ResourceManager.Sql
{
public partial class ServiceObjectiveData : IUtf8JsonSerializable, IJsonModel<ServiceObjectiveData>
{
void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel<ServiceObjectiveData>)this).Write(writer, ModelSerializationExtensions.WireOptions);
void IJsonModel<ServiceObjectiveData>.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)
{
var format = options.Format == "W" ? ((IPersistableModel<ServiceObjectiveData>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(ServiceObjectiveData)} does not support writing '{format}' format.");
}
base.JsonModelWriteCore(writer, options);
writer.WritePropertyName("properties"u8);
writer.WriteStartObject();
if (options.Format != "W" && Optional.IsDefined(ServiceObjectiveName))
{
writer.WritePropertyName("serviceObjectiveName"u8);
writer.WriteStringValue(ServiceObjectiveName);
}
if (options.Format != "W" && Optional.IsDefined(IsDefault))
{
writer.WritePropertyName("isDefault"u8);
writer.WriteBooleanValue(IsDefault.Value);
}
if (options.Format != "W" && Optional.IsDefined(IsSystem))
{
writer.WritePropertyName("isSystem"u8);
writer.WriteBooleanValue(IsSystem.Value);
}
if (options.Format != "W" && Optional.IsDefined(Description))
{
writer.WritePropertyName("description"u8);
writer.WriteStringValue(Description);
}
if (options.Format != "W" && Optional.IsDefined(IsEnabled))
{
writer.WritePropertyName("enabled"u8);
writer.WriteBooleanValue(IsEnabled.Value);
}
writer.WriteEndObject();
}
ServiceObjectiveData IJsonModel<ServiceObjectiveData>.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
{
var format = options.Format == "W" ? ((IPersistableModel<ServiceObjectiveData>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(ServiceObjectiveData)} does not support reading '{format}' format.");
}
using JsonDocument document = JsonDocument.ParseValue(ref reader);
return DeserializeServiceObjectiveData(document.RootElement, options);
}
internal static ServiceObjectiveData DeserializeServiceObjectiveData(JsonElement element, ModelReaderWriterOptions options = null)
{
options ??= ModelSerializationExtensions.WireOptions;
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
ResourceIdentifier id = default;
string name = default;
ResourceType type = default;
SystemData systemData = default;
string serviceObjectiveName = default;
bool? isDefault = default;
bool? isSystem = default;
string description = default;
bool? enabled = default;
IDictionary<string, BinaryData> serializedAdditionalRawData = default;
Dictionary<string, BinaryData> rawDataDictionary = new Dictionary<string, BinaryData>();
foreach (var property in element.EnumerateObject())
{
if (property.NameEquals("id"u8))
{
id = new ResourceIdentifier(property.Value.GetString());
continue;
}
if (property.NameEquals("name"u8))
{
name = property.Value.GetString();
continue;
}
if (property.NameEquals("type"u8))
{
type = new ResourceType(property.Value.GetString());
continue;
}
if (property.NameEquals("systemData"u8))
{
if (property.Value.ValueKind == JsonValueKind.Null)
{
continue;
}
systemData = JsonSerializer.Deserialize<SystemData>(property.Value.GetRawText());
continue;
}
if (property.NameEquals("properties"u8))
{
if (property.Value.ValueKind == JsonValueKind.Null)
{
property.ThrowNonNullablePropertyIsNull();
continue;
}
foreach (var property0 in property.Value.EnumerateObject())
{
if (property0.NameEquals("serviceObjectiveName"u8))
{
serviceObjectiveName = property0.Value.GetString();
continue;
}
if (property0.NameEquals("isDefault"u8))
{
if (property0.Value.ValueKind == JsonValueKind.Null)
{
continue;
}
isDefault = property0.Value.GetBoolean();
continue;
}
if (property0.NameEquals("isSystem"u8))
{
if (property0.Value.ValueKind == JsonValueKind.Null)
{
continue;
}
isSystem = property0.Value.GetBoolean();
continue;
}
if (property0.NameEquals("description"u8))
{
description = property0.Value.GetString();
continue;
}
if (property0.NameEquals("enabled"u8))
{
if (property0.Value.ValueKind == JsonValueKind.Null)
{
continue;
}
enabled = property0.Value.GetBoolean();
continue;
}
}
continue;
}
if (options.Format != "W")
{
rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
}
}
serializedAdditionalRawData = rawDataDictionary;
return new ServiceObjectiveData(
id,
name,
type,
systemData,
serviceObjectiveName,
isDefault,
isSystem,
description,
enabled,
serializedAdditionalRawData);
}
private BinaryData SerializeBicep(ModelReaderWriterOptions options)
{
StringBuilder builder = new StringBuilder();
BicepModelReaderWriterOptions bicepOptions = options as BicepModelReaderWriterOptions;
IDictionary<string, string> propertyOverrides = null;
bool hasObjectOverride = bicepOptions != null && bicepOptions.PropertyOverrides.TryGetValue(this, out propertyOverrides);
bool hasPropertyOverride = false;
string propertyOverride = null;
builder.AppendLine("{");
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(Name), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" name: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(Name))
{
builder.Append(" name: ");
if (Name.Contains(Environment.NewLine))
{
builder.AppendLine("'''");
builder.AppendLine($"{Name}'''");
}
else
{
builder.AppendLine($"'{Name}'");
}
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(Id), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" id: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(Id))
{
builder.Append(" id: ");
builder.AppendLine($"'{Id.ToString()}'");
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(SystemData), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" systemData: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(SystemData))
{
builder.Append(" systemData: ");
builder.AppendLine($"'{SystemData.ToString()}'");
}
}
builder.Append(" properties:");
builder.AppendLine(" {");
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(ServiceObjectiveName), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" serviceObjectiveName: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(ServiceObjectiveName))
{
builder.Append(" serviceObjectiveName: ");
if (ServiceObjectiveName.Contains(Environment.NewLine))
{
builder.AppendLine("'''");
builder.AppendLine($"{ServiceObjectiveName}'''");
}
else
{
builder.AppendLine($"'{ServiceObjectiveName}'");
}
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(IsDefault), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" isDefault: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(IsDefault))
{
builder.Append(" isDefault: ");
var boolValue = IsDefault.Value == true ? "true" : "false";
builder.AppendLine($"{boolValue}");
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(IsSystem), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" isSystem: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(IsSystem))
{
builder.Append(" isSystem: ");
var boolValue = IsSystem.Value == true ? "true" : "false";
builder.AppendLine($"{boolValue}");
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(Description), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" description: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(Description))
{
builder.Append(" description: ");
if (Description.Contains(Environment.NewLine))
{
builder.AppendLine("'''");
builder.AppendLine($"{Description}'''");
}
else
{
builder.AppendLine($"'{Description}'");
}
}
}
hasPropertyOverride = hasObjectOverride && propertyOverrides.TryGetValue(nameof(IsEnabled), out propertyOverride);
if (hasPropertyOverride)
{
builder.Append(" enabled: ");
builder.AppendLine(propertyOverride);
}
else
{
if (Optional.IsDefined(IsEnabled))
{
builder.Append(" enabled: ");
var boolValue = IsEnabled.Value == true ? "true" : "false";
builder.AppendLine($"{boolValue}");
}
}
builder.AppendLine(" }");
builder.AppendLine("}");
return BinaryData.FromString(builder.ToString());
}
BinaryData IPersistableModel<ServiceObjectiveData>.Write(ModelReaderWriterOptions options)
{
var format = options.Format == "W" ? ((IPersistableModel<ServiceObjectiveData>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
return ModelReaderWriter.Write(this, options);
case "bicep":
return SerializeBicep(options);
default:
throw new FormatException($"The model {nameof(ServiceObjectiveData)} does not support writing '{options.Format}' format.");
}
}
ServiceObjectiveData IPersistableModel<ServiceObjectiveData>.Create(BinaryData data, ModelReaderWriterOptions options)
{
var format = options.Format == "W" ? ((IPersistableModel<ServiceObjectiveData>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
{
using JsonDocument document = JsonDocument.Parse(data, ModelSerializationExtensions.JsonDocumentOptions);
return DeserializeServiceObjectiveData(document.RootElement, options);
}
default:
throw new FormatException($"The model {nameof(ServiceObjectiveData)} does not support reading '{options.Format}' format.");
}
}
string IPersistableModel<ServiceObjectiveData>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
}
}