/// <summary> /// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object /// </summary> public IOpenApiReferenceable ResolveReference(OpenApiReference reference, bool useExternal) { if (reference == null) { return(null); } // Todo: Verify if we need to check to see if this external reference is actually targeted at this document. if (useExternal) { if (this.Workspace == null) { throw new ArgumentException(Properties.SRResource.WorkspaceRequredForExternalReferenceResolution); } return(this.Workspace.ResolveReference(reference)); } if (!reference.Type.HasValue) { throw new ArgumentException(Properties.SRResource.LocalReferenceRequiresType); } // Special case for Tag if (reference.Type == ReferenceType.Tag) { foreach (var tag in this.Tags) { if (tag.Name == reference.Id) { tag.Reference = reference; return(tag); } } return(null); } if (this.Components == null) { throw new OpenApiException(string.Format(Properties.SRResource.InvalidReferenceId, reference.Id)); } try { switch (reference.Type) { case ReferenceType.Schema: return(this.Components.Schemas[reference.Id]); case ReferenceType.Response: return(this.Components.Responses[reference.Id]); case ReferenceType.Parameter: return(this.Components.Parameters[reference.Id]); case ReferenceType.Example: return(this.Components.Examples[reference.Id]); case ReferenceType.RequestBody: return(this.Components.RequestBodies[reference.Id]); case ReferenceType.Header: return(this.Components.Headers[reference.Id]); case ReferenceType.SecurityScheme: return(this.Components.SecuritySchemes[reference.Id]); case ReferenceType.Link: return(this.Components.Links[reference.Id]); case ReferenceType.Callback: return(this.Components.Callbacks[reference.Id]); default: throw new OpenApiException(Properties.SRResource.InvalidReferenceType); } } catch (KeyNotFoundException) { throw new OpenApiException(string.Format(Properties.SRResource.InvalidReferenceId, reference.Id)); } }
/// <summary> /// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object /// </summary> public IOpenApiReferenceable ResolveReference(OpenApiReference reference) { if (reference == null) { return(null); } if (reference.IsExternal) { // Should not attempt to resolve external references against a single document. throw new ArgumentException(Properties.SRResource.RemoteReferenceNotSupported); } if (!reference.Type.HasValue) { throw new ArgumentException(Properties.SRResource.LocalReferenceRequiresType); } // Special case for Tag if (reference.Type == ReferenceType.Tag) { foreach (var tag in this.Tags) { if (tag.Name == reference.Id) { tag.Reference = reference; return(tag); } } return(null); } if (this.Components == null) { throw new OpenApiException(string.Format(Properties.SRResource.InvalidReferenceId, reference.Id)); } try { switch (reference.Type) { case ReferenceType.Schema: return(this.Components.Schemas[reference.Id]); case ReferenceType.Response: return(this.Components.Responses[reference.Id]); case ReferenceType.Parameter: return(this.Components.Parameters[reference.Id]); case ReferenceType.Example: return(this.Components.Examples[reference.Id]); case ReferenceType.RequestBody: return(this.Components.RequestBodies[reference.Id]); case ReferenceType.Header: return(this.Components.Headers[reference.Id]); case ReferenceType.SecurityScheme: return(this.Components.SecuritySchemes[reference.Id]); case ReferenceType.Link: return(this.Components.Links[reference.Id]); case ReferenceType.Callback: return(this.Components.Callbacks[reference.Id]); default: throw new OpenApiException(Properties.SRResource.InvalidReferenceType); } } catch (KeyNotFoundException) { throw new OpenApiException(string.Format(Properties.SRResource.InvalidReferenceId, reference.Id)); } }
/// <summary> /// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object /// </summary> public IOpenApiReferenceable ResolveReference(OpenApiReference reference) { return(ResolveReference(reference, false)); }