// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------ using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Properties; namespace Microsoft.OpenApi.Writers { /// /// Extensions methods for writing the /// public static class OpenApiWriterAnyExtensions { /// /// Write the specification extensions /// /// The Open API writer. /// The specification extensions. public static void WriteExtensions(this IOpenApiWriter writer, IDictionary extensions) { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } if (extensions != null) { foreach (var item in extensions) { writer.WritePropertyName(item.Key); writer.WriteAny(item.Value); } } } /// /// Write the value. /// /// The Open API Any type. /// The Open API writer. /// The Any value public static void WriteAny(this IOpenApiWriter writer, T any) where T : IOpenApiAny { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } if (any == null) { writer.WriteNull(); return; } switch (any.AnyType) { case AnyType.Array: // Array writer.WriteArray(any as OpenApiArray); break; case AnyType.Object: // Object writer.WriteObject(any as OpenApiObject); break; case AnyType.Primitive: // Primitive writer.WritePrimitive(any as IOpenApiPrimitive); break; case AnyType.Null: // null writer.WriteNull(); break; default: break; } } private static void WriteArray(this IOpenApiWriter writer, OpenApiArray array) { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } if (array == null) { throw Error.ArgumentNull(nameof(array)); } writer.WriteStartArray(); foreach (var item in array) { writer.WriteAny(item); } writer.WriteEndArray(); } private static void WriteObject(this IOpenApiWriter writer, OpenApiObject entity) { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } if (entity == null) { throw Error.ArgumentNull(nameof(entity)); } writer.WriteStartObject(); foreach (var item in entity) { writer.WritePropertyName(item.Key); writer.WriteAny(item.Value); } writer.WriteEndObject(); } private static void WritePrimitive(this IOpenApiWriter writer, IOpenApiPrimitive primitive) { if (writer == null) { throw Error.ArgumentNull(nameof(writer)); } if (primitive == null) { throw Error.ArgumentNull(nameof(primitive)); } switch (primitive.PrimitiveType) { case PrimitiveType.Integer: var intValue = (OpenApiInteger)primitive; writer.WriteValue(intValue.Value); break; case PrimitiveType.Long: var longValue = (OpenApiLong)primitive; writer.WriteValue(longValue.Value); break; case PrimitiveType.Float: var floatValue = (OpenApiFloat)primitive; writer.WriteValue(floatValue.Value); break; case PrimitiveType.Double: var doubleValue = (OpenApiDouble)primitive; writer.WriteValue(doubleValue.Value); break; case PrimitiveType.String: var stringValue = (OpenApiString)primitive; writer.WriteValue(stringValue.Value); break; case PrimitiveType.Byte: var byteValue = (OpenApiByte)primitive; writer.WriteValue(byteValue.Value); break; case PrimitiveType.Binary: var binaryValue = (OpenApiBinary)primitive; writer.WriteValue(binaryValue.Value); break; case PrimitiveType.Boolean: var boolValue = (OpenApiBoolean)primitive; writer.WriteValue(boolValue.Value); break; case PrimitiveType.Date: var dateValue = (OpenApiDate)primitive; writer.WriteValue(dateValue.Value); break; case PrimitiveType.DateTime: var dateTimeValue = (OpenApiDateTime)primitive; writer.WriteValue(dateTimeValue.Value); break; case PrimitiveType.Password: var passwordValue = (OpenApiPassword)primitive; writer.WriteValue(passwordValue.Value); break; default: throw new OpenApiWriterException( string.Format( SRResource.PrimitiveTypeNotSupported, primitive.PrimitiveType)); } } } }