Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public static OpenApiDocument LoadOpenApi(RootNode rootNode)
{
{ "title", (o,n) => { o.Title = n.GetScalarValue(); } },
{ "description", (o,n) => { o.Description = n.GetScalarValue(); } },
{ "termsOfService", (o,n) => { o.TermsOfService = n.GetScalarValue(); } },
{ "termsOfService", (o,n) => { o.TermsOfService = new Uri(n.GetScalarValue()); } },
{ "contact", (o,n) => { o.Contact = LoadContact(n); } },
{ "license", (o,n) => { o.License = LoadLicense(n); } },
{ "version", (o,n) => { o.Version = new Version(n.GetScalarValue()); } }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static OpenApiDocument LoadOpenApi(RootNode rootNode)
{ "title", (o,n) => { o.Title = n.GetScalarValue(); } },
{ "version", (o,n) => { o.Version = new Version(n.GetScalarValue()); } },
{ "description", (o,n) => { o.Description = n.GetScalarValue(); } },
{ "termsOfService", (o,n) => { o.TermsOfService = n.GetScalarValue(); } },
{ "termsOfService", (o,n) => { o.TermsOfService = new Uri(n.GetScalarValue()); } },
{ "contact", (o,n) => { o.Contact = LoadContact(n); } },
{ "license", (o,n) => { o.License = LoadLicense(n); } }
};
Expand Down
15 changes: 4 additions & 11 deletions src/Microsoft.OpenApi.Workbench/MainModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,18 +121,11 @@ internal void Validate()

private string WriteContents(OpenApiDocument doc)
{
Func<Stream, IOpenApiWriter> writerFactory = s => (this.format == "Yaml" ? new OpenApiYamlWriter(new StreamWriter(s)) : (IOpenApiWriter)new OpenApiJsonWriter(new StreamWriter(s)));
IOpenApiStructureWriter writer;
if (IsV3)
{
writer = new OpenApiV3Writer(writerFactory);
} else
{
writer = new OpenApiV2Writer(writerFactory);
}

var outputstream = new MemoryStream();
writer.Write(outputstream, doc);
doc.Serialize(outputstream,
IsV3 ? OpenApiSpecVersion.OpenApi3_0 : OpenApiSpecVersion.OpenApi2_0,
this.format == "Yaml" ? OpenApiFormat.Yaml : OpenApiFormat.Json);

outputstream.Position = 0;

return new StreamReader(outputstream).ReadToEnd();
Expand Down
36 changes: 35 additions & 1 deletion src/Microsoft.OpenApi/Models/OpenApiCallback.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,52 @@
using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;

namespace Microsoft.OpenApi.Models
{
/// <summary>
/// Callback Object: A map of possible out-of band callbacks related to the parent operation.
/// </summary>
public class OpenApiCallback : IOpenApiReference, IOpenApiExtension
public class OpenApiCallback : OpenApiElement, IOpenApiReference, IOpenApiExtension
{
public Dictionary<RuntimeExpression, OpenApiPathItem> PathItems { get; set; } = new Dictionary<RuntimeExpression, OpenApiPathItem>();

public OpenApiReference Pointer { get; set; }

public IDictionary<string, IOpenApiAny> Extensions { get; set; }

/// <summary>
/// Serialize <see cref="OpenApiCallback"/> to Open Api v3.0
/// </summary>
internal override void WriteAsV3(IOpenApiWriter writer)
{
if (writer == null)
{
throw Error.ArgumentNull(nameof(writer));
}

if (this.IsReference())
{
this.WriteRef(writer);
}
else
{
writer.WriteStartObject();
foreach (var item in PathItems)
{
writer.WriteObject<OpenApiPathItem>(item.Key.Expression, item.Value, (w, p) => p.WriteAsV3(w));
}
writer.WriteEndObject();
}
}

/// <summary>
/// Serialize <see cref="OpenApiCallback"/> to Open Api v2.0
/// </summary>
internal override void WriteAsV2(IOpenApiWriter writer)
{
// nothing here
}
}
}
44 changes: 43 additions & 1 deletion src/Microsoft.OpenApi/Models/OpenApiComponents.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@
using System.Collections.Generic;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;

namespace Microsoft.OpenApi.Models
{
/// <summary>
/// Components Object.
/// </summary>
public class OpenApiComponents : IOpenApiExtension
public class OpenApiComponents : OpenApiElement, IOpenApiExtension
{
public IDictionary<string, OpenApiSchema> Schemas { get; set; } = new Dictionary<string, OpenApiSchema>();
public IDictionary<string, OpenApiResponse> Responses { get; set; } = new Dictionary<string, OpenApiResponse>();
Expand All @@ -37,5 +38,46 @@ public bool IsEmpty()
|| this.Links.Count > 0
|| this.Callbacks.Count > 0);
}

/// <summary>
/// Serialize <see cref="OpenApiComponents"/> to Open Api v3.0
/// </summary>
internal override void WriteAsV3(IOpenApiWriter writer)
{
if (writer == null)
{
throw Error.ArgumentNull(nameof(writer));
}

writer.WriteStartObject();
writer.WriteMap("schemas", Schemas, (w, s) => s.WriteAsV3(w));
writer.WriteMap("responses", Responses, (w, r) => r.WriteAsV3(w));
writer.WriteMap("parameters", Parameters, (w, p) => p.WriteAsV3(w));
writer.WriteMap("examples", Examples, (w, e) => e.WriteAsV3(w));
writer.WriteMap("requestBodies", RequestBodies, (w, r) => r.WriteAsV3(w));
writer.WriteMap("headers", Headers, (w, h) => h.WriteAsV3(w));
writer.WriteMap("securitySchemes", SecuritySchemes, (w, s) => s.WriteAsV3(w));
writer.WriteMap("links", Links, (w, link) => link.WriteAsV3(w));
writer.WriteMap("callbacks", Callbacks, (w, c) => c.WriteAsV3(w));
writer.WriteEndObject();
}

/// <summary>
/// Serialize <see cref="OpenApiComponents"/> to Open Api v2.0
/// </summary>
internal override void WriteAsV2(IOpenApiWriter writer)
{
if (writer == null)
{
throw Error.ArgumentNull(nameof(writer));
}

writer.WriteStartObject();
writer.WriteMap("definitions", Schemas, (w, s) => s.WriteAsV2(w));
writer.WriteMap("responses", Responses, (w, r) => r.WriteAsV2(w));
writer.WriteMap("parameters", Parameters, (w, p) => p.WriteAsV2(w));
writer.WriteMap("securityDefinitions", SecuritySchemes, (w, s) => s.WriteAsV2(w));
writer.WriteEndObject();
}
}
}
216 changes: 216 additions & 0 deletions src/Microsoft.OpenApi/Models/OpenApiConstants.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
// ------------------------------------------------------------

using System;

namespace Microsoft.OpenApi.Models
{
internal static class OpenApiConstants
{
public const string OpenApiDocOpenApi = "openapi";

public const string OpenApiDocInfo = "info";

public const string OpenApiDocTitle = "title";

public const string OpenApiDocType = "type";

public const string OpenApiDocFormat = "format";

public const string OpenApiDocVersion = "version";

public const string OpenApiDocContact = "contact";

public const string OpenApiDocLicense = "license";

public const string OpenApiDocTermsOfService = "termsOfService";

public const string OpenApiDocServers = "servers";

public const string OpenApiDocServer = "server";

public const string OpenApiDocPaths = "paths";

public const string OpenApiDocComponents = "components";

public const string OpenApiDocSecurity = "security";

public const string OpenApiDocTags = "tags";

public const string OpenApiDocExternalDocs = "externalDocs";

public const string OpenApiDocOperationRef = "operationRef";

public const string OpenApiDocOperationId = "operationId";

public const string OpenApiDocParameters = "parameters";

public const string OpenApiDocRequestBody = "requestBody";

public const string OpenApiDocExtensionFieldNamePrefix = "x-";

public const string OpenApiDocName = "name";

public const string OpenApiDocIn = "in";

public const string OpenApiDocSummary = "summary";

public const string OpenApiDocVariables = "variables";

public const string OpenApiDocDescription = "description";

public const string OpenApiDocRequired = "required";

public const string OpenApiDocDeprecated = "deprecated";

public const string OpenApiDocStyle = "style";

public const string OpenApiDocExplode = "explode";

public const string OpenApiDocAllowReserved = "allowReserved";

public const string OpenApiDocSchema = "schema";

public const string OpenApiDocSchemas = "schemas";

public const string OpenApiDocResponses = "responses";

public const string OpenApiDocExample = "example";

public const string OpenApiDocExamples = "examples";

public const string OpenApiDocEncoding = "encoding";

public const string OpenApiDocRequestBodies = "requestBodies";

public const string OpenApiDocAllowEmptyValue = "allowEmptyValue";

public const string OpenApiDocValue = "value";

public const string OpenApiDocExternalValue = "externalValue";

public const string OpenApiDocDollarRef = "$ref";

public const string OpenApiDocHeaders = "headers";

public const string OpenApiDocSecuritySchemes = "securitySchemes";

public const string OpenApiDocContent = "content";

public const string OpenApiDocLinks = "links";

public const string OpenApiDocCallbacks = "callbacks";

public const string OpenApiDocUrl = "url";

public const string OpenApiDocEmail = "email";

public const string OpenApiDocDefault = "default";

public const string OpenApiDocEnum = "enum";

public const string OpenApiDocMultipleOf = "multipleOf";

public const string OpenApiDocMaximum = "maximum";

public const string OpenApiDocExclusiveMaximum = "exclusiveMaximum";

public const string OpenApiDocMinimum = "minimum";

public const string OpenApiDocExclusiveMinimum = "exclusiveMinimum";

public const string OpenApiDocMaxLength = "maxLength";

public const string OpenApiDocMinLength = "minLength";

public const string OpenApiDocPattern = "pattern";

public const string OpenApiDocMaxItems = "maxItems";

public const string OpenApiDocMinItems = "minItems";

public const string OpenApiDocUniqueItems = "uniqueItems";

public const string OpenApiDocMaxProperties = "maxProperties";

public const string OpenApiDocMinProperties = "minProperties";

public const string OpenApiDocAllOf = "allOf";

public const string OpenApiDocOneOf = "oneOf";

public const string OpenApiDocAnyOf = "anyOf";

public const string OpenApiDocNot = "not";

public const string OpenApiDocItems = "items";

public const string OpenApiDocProperties = "properties";

public const string OpenApiDocAdditionalProperties = "additionalProperties";

public const string OpenApiDocNullable = "nullable";

public const string OpenApiDocDiscriminator = "discriminator";

public const string OpenApiDocReadOnly = "readOnly";

public const string OpenApiDocWriteOnly = "writeOnly";

public const string OpenApiDocXml = "xml";

public const string OpenApiDocFlow = "flow";

public const string OpenApiDocApplication = "application";

public const string OpenApiDocAccessCode = "accessCode";

public const string OpenApiDocImplicit = "implicit";

public const string OpenApiDocPassword = "password";

public const string OpenApiDocClientCredentials = "clientCredentials";

public const string OpenApiDocAuthorizationCode = "authorizationCode";

public const string OpenApiDocAuthorizationUrl = "authorizationUrl";

public const string OpenApiDocTokenUrl = "tokenUrl";

public const string OpenApiDocRefreshUrl = "refreshUrl";

public const string OpenApiDocScopes = "scopes";

public const string OpenApiDocContentType = "contentType";

public const string OpenApiDocGet = "get";

public const string OpenApiDocPut = "put";

public const string OpenApiDocPost = "post";

public const string OpenApiDocDelete = "delete";

public const string OpenApiDocOptions = "options";

public const string OpenApiDocHead = "head";

public const string OpenApiDocPatch = "patch";

public const string OpenApiDocTrace = "trace";

public const string OpenApiDocDefaultName = "Default Name";

public const string OpenApiDocDefaultDefault = "Default Default";

public const string OpenApiDocDefaultTitle = "Default Title";

public static Version OpenApiDocDefaultVersion = new Version(3, 0, 0);

public static Uri OpenApiDocDefaultUrl = new Uri("http://localhost/");

public const string OpenApiDocDefaultDescription = "Default Description";
}
}
Loading