mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-10 03:13:53 +02:00
move 'WireMock.Net.OpenApiParser.Preview' to ''src-preview' folder
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
// Copyright © WireMock.Net
|
||||
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using Microsoft.OpenApi.Any;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Microsoft.OpenApi.Models.Interfaces;
|
||||
using WireMock.Net.OpenApiParser.Types;
|
||||
|
||||
namespace WireMock.Net.OpenApiParser.Extensions;
|
||||
|
||||
internal static class OpenApiSchemaExtensions
|
||||
{
|
||||
public static bool TryGetXNullable(this IOpenApiSchema schema, out bool value)
|
||||
{
|
||||
value = false;
|
||||
|
||||
if (schema.Extensions != null && schema.Extensions.TryGetValue(OpenApiConstants.NullableExtension, out var nullExtRawValue) && nullExtRawValue is OpenApiAny { Node: { } jsonNode })
|
||||
{
|
||||
value = jsonNode.GetValueKind() == JsonValueKind.True;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static JsonSchemaType? GetSchemaType(this IOpenApiSchema? schema, out bool isNullable)
|
||||
{
|
||||
isNullable = false;
|
||||
|
||||
if (schema == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (schema.Type == null)
|
||||
{
|
||||
if (schema.AllOf?.Any() == true || schema.AnyOf?.Any() == true)
|
||||
{
|
||||
return JsonSchemaType.Object;
|
||||
}
|
||||
}
|
||||
|
||||
isNullable = (schema.Type | JsonSchemaType.Null) == JsonSchemaType.Null || (schema.TryGetXNullable(out var xNullable) && xNullable);
|
||||
|
||||
// Removes the Null flag from the schema.Type, ensuring the returned value represents a non-nullable type.
|
||||
return schema.Type & ~JsonSchemaType.Null;
|
||||
}
|
||||
|
||||
public static SchemaFormat GetSchemaFormat(this IOpenApiSchema? schema)
|
||||
{
|
||||
switch (schema?.Format)
|
||||
{
|
||||
case "float":
|
||||
return SchemaFormat.Float;
|
||||
|
||||
case "double":
|
||||
return SchemaFormat.Double;
|
||||
|
||||
case "int32":
|
||||
return SchemaFormat.Int32;
|
||||
|
||||
case "int64":
|
||||
return SchemaFormat.Int64;
|
||||
|
||||
case "date":
|
||||
return SchemaFormat.Date;
|
||||
|
||||
case "date-time":
|
||||
return SchemaFormat.DateTime;
|
||||
|
||||
case "password":
|
||||
return SchemaFormat.Password;
|
||||
|
||||
case "byte":
|
||||
return SchemaFormat.Byte;
|
||||
|
||||
case "binary":
|
||||
return SchemaFormat.Binary;
|
||||
|
||||
default:
|
||||
return SchemaFormat.Undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user