diff --git a/lib/open_api_spex/cast.ex b/lib/open_api_spex/cast.ex index 4d245e91..6b5beefc 100644 --- a/lib/open_api_spex/cast.ex +++ b/lib/open_api_spex/cast.ex @@ -100,10 +100,21 @@ defmodule OpenApiSpex.Cast do """ - @spec cast(schema_or_reference | nil, term(), map(), [cast_opt()]) :: + @spec cast(schema_or_reference | nil, term(), map(), [ + cast_opt() | {:read_write_scope, read_write_scope()} + ]) :: {:ok, term()} | {:error, [Error.t()]} def cast(schema, value, schemas \\ %{}, opts \\ []) do - ctx = %__MODULE__{schema: schema, value: value, schemas: schemas, opts: opts} + {read_write_scope, opts} = Keyword.pop(opts, :read_write_scope, nil) + + ctx = %__MODULE__{ + schema: schema, + value: value, + schemas: schemas, + opts: opts, + read_write_scope: read_write_scope + } + cast(ctx) end diff --git a/lib/open_api_spex/plug/cast_and_validate.ex b/lib/open_api_spex/plug/cast_and_validate.ex index e8af40fc..ce7fa94d 100644 --- a/lib/open_api_spex/plug/cast_and_validate.ex +++ b/lib/open_api_spex/plug/cast_and_validate.ex @@ -79,7 +79,13 @@ defmodule OpenApiSpex.Plug.CastAndValidate do cast_opts = opts |> Map.take([:replace_params]) |> Map.to_list() - case OpenApiSpex.cast_and_validate(spec, operation, conn, nil, cast_opts) do + case OpenApiSpex.cast_and_validate( + spec, + operation, + conn, + nil, + cast_opts ++ [read_write_scope: :write] + ) do {:ok, conn} -> conn