diff --git a/lib/open_api_spex/cast/enum.ex b/lib/open_api_spex/cast/enum.ex index b78c146c..f3a664ff 100644 --- a/lib/open_api_spex/cast/enum.ex +++ b/lib/open_api_spex/cast/enum.ex @@ -3,8 +3,8 @@ defmodule OpenApiSpex.Cast.Enum do alias OpenApiSpex.Cast def cast(ctx = %Cast{schema: %{enum: enum}, value: value}) do - case Enum.find(enum, {:error, :invalid_enum}, &equivalent?(&1, value)) do - {:error, :invalid_enum} -> Cast.error(ctx, {:invalid_enum}) + case Enum.find(enum, {:error, :invalid_enum, enum, value}, &equivalent?(&1, value)) do + {:error, :invalid_enum, enum, value} -> Cast.error(ctx, {:invalid_enum, enum, value}) found -> {:ok, found} end end diff --git a/lib/open_api_spex/cast/error.ex b/lib/open_api_spex/cast/error.ex index 49cefec0..47e124e8 100644 --- a/lib/open_api_spex/cast/error.ex +++ b/lib/open_api_spex/cast/error.ex @@ -196,8 +196,8 @@ defmodule OpenApiSpex.Cast.Error do |> add_context_fields(ctx) end - def new(ctx, {:invalid_enum}) do - %__MODULE__{reason: :invalid_enum} + def new(ctx, {:invalid_enum, enum, value}) do + %__MODULE__{reason: :invalid_enum, meta: %{enum: enum, value: value}} |> add_context_fields(ctx) end @@ -329,8 +329,8 @@ defmodule OpenApiSpex.Cast.Error do "Invalid format. Expected #{inspect(format)}" end - def message(%{reason: :invalid_enum}) do - "Invalid value for enum" + def message(%{reason: :invalid_enum, meta: %{enum: enum, value: value}}) do + "Invalid value for enum, allowed_values: #{inspect(enum)}, got: #{inspect(value)}" end def message(%{reason: :polymorphic_failed, type: polymorphic_type}) do