Skip to main content

lib/cuerdo/open_api/parameter.ex

defmodule Cuerdo.OpenAPI.Parameter do
  @moduledoc """
  OpenAPI [Parameter Object](https://spec.openapis.org/oas/v3.2.0.html#parameter-object)
  """
  use Cuerdo.Object,
    schema: %{
      name: Zoi.string(),
      in: Zoi.string() |> Zoi.one_of(["query", "querystring", "header", "path"]),
      required: Zoi.boolean() |> Zoi.default(false)
    }

  @type t :: %__MODULE__{}

  @impl Cuerdo.Object
  def validations do
    [:required_in_path]
  end

  def required_in_path(%{in: "path", required: false} = _schema) do
    {:error, "parameter in path must have required = true"}
  end

  def required_in_path(_), do: :ok
end