defmodule OpenApiSpex.Response do @moduledoc """ Defines the `OpenApiSpex.Response.t` type. """ alias OpenApiSpex.{Components, Header, Link, MediaType, Reference, Response} @enforce_keys :description defstruct [ :description, :headers, :content, :links, :extensions ] @typedoc """ [Response Object](https://swagger.io/specification/#responseObject) Describes a single response from an API Operation, including design-time, static links to operations based on the response. """ @type t :: %__MODULE__{ description: String.t(), headers: %{String.t() => Header.t() | Reference.t()} | nil, content: %{String.t() => MediaType.t()} | nil, links: %{String.t() => Link.t() | Reference.t()} | nil, extensions: %{String.t() => any()} | nil } @doc """ Resolve a `Reference` to the `Response` it refers to. ## Examples iex> alias OpenApiSpex.{Response, Reference} ...> responses = %{"aresponse" => %Response{description: "Some response"}} ...> Response.resolve_response(%Reference{"$ref": "#/components/responses/aresponse"}, responses) %OpenApiSpex.Response{description: "Some response"} """ @spec resolve_response(Reference.t(), Components.responses_map()) :: Response.t() | nil def resolve_response(%Response{} = response, _responses), do: response def resolve_response(%Reference{"$ref": "#/components/responses/" <> name}, responses), do: responses[name] end