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"; } }