OpenAPI.NET.OData/tool/Microsoft.OpenApi/Writers/OpenApiWriterAnyExtensions.cs

204 lines
6.4 KiB
C#

// ------------------------------------------------------------
// 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
{
/// <summary>
/// Extensions methods for writing the <see cref="IOpenApiAny"/>
/// </summary>
public static class OpenApiWriterAnyExtensions
{
/// <summary>
/// Write the specification extensions
/// </summary>
/// <param name="writer">The Open API writer.</param>
/// <param name="extensions">The specification extensions.</param>
public static void WriteExtensions(this IOpenApiWriter writer, IDictionary<string, IOpenApiAny> 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);
}
}
}
/// <summary>
/// Write the <see cref="IOpenApiAny"/> value.
/// </summary>
/// <typeparam name="T">The Open API Any type.</typeparam>
/// <param name="writer">The Open API writer.</param>
/// <param name="any">The Any value</param>
public static void WriteAny<T>(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));
}
}
}
}