/// <summary> /// Serialize to OpenAPI V2 document without using reference. /// </summary> public void SerializeAsV2WithoutReference(IOpenApiWriter writer) { if (Type == SecuritySchemeType.Http && Scheme != OpenApiConstants.Basic) { // Bail because V2 does not support non-basic HTTP scheme writer.WriteStartObject(); writer.WriteEndObject(); return; } if (Type == SecuritySchemeType.OpenIdConnect) { // Bail because V2 does not support OpenIdConnect writer.WriteStartObject(); writer.WriteEndObject(); return; } writer.WriteStartObject(); // type switch (Type) { case SecuritySchemeType.Http: writer.WriteProperty(OpenApiConstants.Type, OpenApiConstants.Basic); break; case SecuritySchemeType.OAuth2: // These properties apply to ouauth2 type only. // flow // authorizationUrl // tokenUrl // scopes writer.WriteProperty(OpenApiConstants.Type, Type.GetDisplayName()); WriteOAuthFlowForV2(writer, Flows); break; case SecuritySchemeType.ApiKey: // These properties apply to apiKey type only. // name // in writer.WriteProperty(OpenApiConstants.Type, Type.GetDisplayName()); writer.WriteProperty(OpenApiConstants.Name, Name); writer.WriteProperty(OpenApiConstants.In, In.GetDisplayName()); break; } // description writer.WriteProperty(OpenApiConstants.Description, Description); // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi2_0); writer.WriteEndObject(); }
/// <summary> /// Serialize to OpenAPI V3 document without using reference. /// </summary> public void SerializeAsV3WithoutReference(IOpenApiWriter writer) { writer.WriteStartObject(); // name writer.WriteProperty(OpenApiConstants.Name, Name); // in writer.WriteProperty(OpenApiConstants.In, In.GetDisplayName()); // description writer.WriteProperty(OpenApiConstants.Description, Description); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // allowEmptyValue writer.WriteProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false); // style writer.WriteProperty(OpenApiConstants.Style, Style?.GetDisplayName()); // explode writer.WriteProperty(OpenApiConstants.Explode, Explode, false); // allowReserved writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // schema writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV3(w)); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, s) => w.WriteAny(s)); // examples writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => e.SerializeAsV3(w)); // content writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); }
/// <summary> /// Serialize to OpenAPI V3 document without using reference. /// </summary> public void SerializeAsV3WithoutReference(IOpenApiWriter writer) { writer.WriteStartObject(); // type writer.WriteProperty(OpenApiConstants.Type, Type.GetDisplayName()); // description writer.WriteProperty(OpenApiConstants.Description, Description); switch (Type) { case SecuritySchemeType.ApiKey: // These properties apply to apiKey type only. // name // in writer.WriteProperty(OpenApiConstants.Name, Name); writer.WriteProperty(OpenApiConstants.In, In.GetDisplayName()); break; case SecuritySchemeType.Http: // These properties apply to http type only. // scheme // bearerFormat writer.WriteProperty(OpenApiConstants.Scheme, Scheme); writer.WriteProperty(OpenApiConstants.BearerFormat, BearerFormat); break; case SecuritySchemeType.OAuth2: // This property apply to oauth2 type only. // flows writer.WriteOptionalObject(OpenApiConstants.Flows, Flows, (w, o) => o.SerializeAsV3(w)); break; case SecuritySchemeType.OpenIdConnect: // This property apply to openIdConnect only. // openIdConnectUrl writer.WriteProperty(OpenApiConstants.OpenIdConnectUrl, OpenIdConnectUrl?.ToString()); break; } // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); }
/// <summary> /// Serialize to OpenAPI V2 document without using reference. /// </summary> public void SerializeAsV2WithoutReference(IOpenApiWriter writer) { writer.WriteStartObject(); // in if (this is OpenApiFormDataParameter) { writer.WriteProperty(OpenApiConstants.In, "formData"); } else if (this is OpenApiBodyParameter) { writer.WriteProperty(OpenApiConstants.In, "body"); } else { writer.WriteProperty(OpenApiConstants.In, In.GetDisplayName()); } // name writer.WriteProperty(OpenApiConstants.Name, Name); // description writer.WriteProperty(OpenApiConstants.Description, Description); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // schema if (this is OpenApiBodyParameter) { writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w)); } // In V2 parameter's type can't be a reference to a custom object schema or can't be of type object // So in that case map the type as string. else if (Schema?.UnresolvedReference == true || Schema?.Type == "object") { writer.WriteProperty(OpenApiConstants.Type, "string"); } else { // type // format // items // collectionFormat // default // maximum // exclusiveMaximum // minimum // exclusiveMinimum // maxLength // minLength // pattern // maxItems // minItems // uniqueItems // enum // multipleOf Schema?.WriteAsItemsProperties(writer); // allowEmptyValue writer.WriteProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false); if (this.In == ParameterLocation.Query) { if (this.Style == ParameterStyle.Form && this.Explode == true) { writer.WriteProperty("collectionFormat", "multi"); } else if (this.Style == ParameterStyle.PipeDelimited) { writer.WriteProperty("collectionFormat", "pipes"); } else if (this.Style == ParameterStyle.SpaceDelimited) { writer.WriteProperty("collectionFormat", "ssv"); } } } // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi2_0); writer.WriteEndObject(); }
/// <summary> /// Serialize to OpenAPI V2 document without using reference. /// </summary> public void SerializeAsV2WithoutReference(IOpenApiWriter writer) { writer.WriteStartObject(); // in if (this is OpenApiFormDataParameter) { writer.WriteProperty(OpenApiConstants.In, "formData"); } else if (this is OpenApiBodyParameter) { writer.WriteProperty(OpenApiConstants.In, "body"); } else { writer.WriteProperty(OpenApiConstants.In, In.GetDisplayName()); } // name writer.WriteProperty(OpenApiConstants.Name, Name); // description writer.WriteProperty(OpenApiConstants.Description, Description); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // schema if (this is OpenApiBodyParameter) { writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w)); } else { // type // format // items // collectionFormat // default // maximum // exclusiveMaximum // minimum // exclusiveMinimum // maxLength // minLength // pattern // maxItems // minItems // uniqueItems // enum // multipleOf Schema?.WriteAsItemsProperties(writer); // allowEmptyValue writer.WriteProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false); } // extensions writer.WriteExtensions(Extensions); writer.WriteEndObject(); }
/// <summary> /// Serialize to OpenAPI V2 document without using reference. /// </summary> public void SerializeAsV2WithoutReference(IOpenApiWriter writer) { writer.WriteStartObject(); // in if (this is OpenApiFormDataParameter) { writer.WriteProperty(OpenApiConstants.In, "formData"); } else if (this is OpenApiBodyParameter) { writer.WriteProperty(OpenApiConstants.In, "body"); } else { writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName()); } // name writer.WriteProperty(OpenApiConstants.Name, Name); // description writer.WriteProperty(OpenApiConstants.Description, Description); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); var extensionsClone = new Dictionary <string, IOpenApiExtension>(Extensions); // schema if (this is OpenApiBodyParameter) { writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w)); } // In V2 parameter's type can't be a reference to a custom object schema or can't be of type object // So in that case map the type as string. else if (Schema?.UnresolvedReference == true || Schema?.Type == "object") { writer.WriteProperty(OpenApiConstants.Type, "string"); } else { // type // format // items // collectionFormat // default // maximum // exclusiveMaximum // minimum // exclusiveMinimum // maxLength // minLength // pattern // maxItems // minItems // uniqueItems // enum // multipleOf if (Schema != null) { Schema.WriteAsItemsProperties(writer); if (Schema.Extensions != null) { foreach (var key in Schema.Extensions.Keys) { // The extension will already have been serialized as part of the call to WriteAsItemsProperties above, // so remove it from the cloned collection so we don't write it again. extensionsClone.Remove(key); } } } // allowEmptyValue writer.WriteProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false); if (this.In == ParameterLocation.Query) { if (this.Style == ParameterStyle.Form && this.Explode == true) { writer.WriteProperty("collectionFormat", "multi"); } else if (this.Style == ParameterStyle.PipeDelimited) { writer.WriteProperty("collectionFormat", "pipes"); } else if (this.Style == ParameterStyle.SpaceDelimited) { writer.WriteProperty("collectionFormat", "ssv"); } } } // extensions writer.WriteExtensions(extensionsClone, OpenApiSpecVersion.OpenApi2_0); writer.WriteEndObject(); }