Current section
Files
Jump to
Current section
Files
lib/open_api/generator/field.ex
defmodule OpenAPI.Generator.Field do
@moduledoc false
alias OpenAPI.Generator.Typing
alias OpenAPI.Spec
alias OpenAPI.State
@type t :: %__MODULE__{
name: String.t(),
nullable: boolean,
required: boolean,
type: Typing.t()
}
defstruct [
:name,
:nullable,
:required,
:type
]
@doc """
Create a list of Fields based on the properties of the given `schema`.
See `Typing.schema_to_type/3` for more information about available options.
"""
@spec list_from_spec(State.t(), Spec.Schema.t(), keyword) :: [t]
def list_from_spec(state, schema, opts \\ [])
def list_from_spec(state, %Spec.Schema{properties: properties, required: required}, opts) do
Enum.map(properties, fn {field_name, %Spec.Schema{nullable: nullable?} = schema} ->
required? = is_list(required) and field_name in required
%__MODULE__{
name: field_name,
nullable: nullable?,
required: required?,
type: Typing.schema_to_type(state, schema, opts)
}
end)
end
end