Packages
open_api_spex
3.5.0
3.22.3
3.22.2
3.22.1
3.22.0
3.21.5
3.21.4
3.21.3
3.21.2
3.21.1
3.21.0
3.20.1
3.20.0
3.19.1
3.19.0
3.18.3
3.18.2
3.18.1
3.18.0
3.17.3
3.17.2
3.17.1
3.17.0
3.16.4
3.16.3
3.16.2
3.16.1
3.16.0
3.15.0
3.14.0
3.13.0
3.12.0
3.11.0
3.10.0
3.9.0
3.8.0
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
3.4.0
3.3.0
3.2.1
3.2.0
3.1.0
3.0.0
2.3.1
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
Leverage Open Api Specification 3 (swagger) to document, test, validate and explore your Plug and Phoenix APIs.
Current section
Files
Jump to
Current section
Files
lib/open_api_spex/cast/any_of.ex
defmodule OpenApiSpex.Cast.AnyOf do
@moduledoc false
alias OpenApiSpex.Cast
def cast(ctx, failed_schemas \\ [])
def cast(%_{schema: %{type: _, anyOf: []}} = ctx, failed_schemas) do
Cast.error(ctx, {:any_of, error_message(failed_schemas, ctx.schemas)})
end
def cast(
%{schema: %{type: _, anyOf: [schema | schemas]}} = ctx,
failed_schemas
) do
with {:ok, value} <- Cast.cast(%{ctx | schema: schema}) do
{:ok, value}
else
_ ->
new_schema = %{ctx.schema | anyOf: schemas}
cast(%{ctx | schema: new_schema}, [schema | failed_schemas])
end
end
## Private functions
defp error_message([], _) do
"[] (no schemas provided)"
end
defp error_message(failed_schemas, schemas) do
for schema <- failed_schemas do
schema = OpenApiSpex.resolve_schema(schema, schemas)
case schema do
%{title: title, type: type} when not is_nil(title) ->
"Schema(title: #{inspect(title)}, type: #{inspect(type)})"
%{type: type} ->
"Schema(type: #{inspect(type)})"
end
end
|> Enum.join(", ")
end
end