Packages
open_api_spex
3.19.0
3.22.3
3.22.2
3.22.1
3.22.0
3.21.5
3.21.4
3.21.3
3.21.2
3.21.1
3.21.0
3.20.1
3.20.0
3.19.1
3.19.0
3.18.3
3.18.2
3.18.1
3.18.0
3.17.3
3.17.2
3.17.1
3.17.0
3.16.4
3.16.3
3.16.2
3.16.1
3.16.0
3.15.0
3.14.0
3.13.0
3.12.0
3.11.0
3.10.0
3.9.0
3.8.0
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
3.4.0
3.3.0
3.2.1
3.2.0
3.1.0
3.0.0
2.3.1
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
Leverage Open Api Specification 3 (swagger) to document, test, validate and explore your Plug and Phoenix APIs.
Current section
Files
Jump to
Current section
Files
lib/open_api_spex/reference.ex
defmodule OpenApiSpex.Reference do
@moduledoc """
Defines the `OpenApiSpex.Reference.t` type.
"""
alias OpenApiSpex.{Components, Parameter, Reference, RequestBody, Response, Schema}
@enforce_keys :"$ref"
defstruct [
:"$ref"
]
@typedoc """
[Reference Object](https://swagger.io/specification/#referenceObject)
A simple object to allow referencing other components in the specification, internally and externally.
The Reference Object is defined by JSON Reference and follows the same structure, behavior and rules.
"""
@type t :: %Reference{
"$ref": String.t()
}
@doc """
Resolve a `Reference` to the `Schema` it refers to.
## Examples
iex> alias OpenApiSpex.{Reference, Schema}
...> schemas = %{"user" => %Schema{title: "user", type: :object}}
...> Reference.resolve_schema(%Reference{"$ref": "#/components/schemas/user"}, schemas)
%OpenApiSpex.Schema{type: :object, title: "user"}
"""
@spec resolve_schema(Reference.t(), Components.schemas_map()) :: Schema.t() | nil
def resolve_schema(%Reference{"$ref": "#/components/schemas/" <> name}, schemas),
do: schemas[name]
@spec resolve_parameter(Reference.t(), %{String.t() => Parameter.t()}) :: Parameter.t() | nil
def resolve_parameter(%Reference{"$ref": "#/components/parameters/" <> name}, parameters),
do: parameters[name]
@spec resolve_request_body(Reference.t(), %{String.t() => RequestBody.t()}) ::
RequestBody.t() | nil
def resolve_request_body(
%Reference{"$ref": "#/components/requestBodies/" <> name},
request_bodies
),
do: request_bodies[name]
@spec resolve_response(Reference.t(), %{String.t() => Response.t()}) ::
Response.t() | nil
def resolve_response(%Reference{"$ref": "#/components/responses/" <> name}, responses),
do: responses[name]
end