Packages
open_api_spex
3.9.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/schema_consistency.ex
defmodule OpenApiSpex.SchemaConsistency do
@moduledoc """
Rules of API Schema consistency.
If these rules are not followed, tricky run-time bugs may appear.
Related issues: #144
"""
alias OpenApiSpex.Schema
@doc "Returns a list of compile-time warnings"
@spec warnings(Schema.t()) :: list(binary())
def warnings(schema) do
[
&validate_type_key/1
]
|> Enum.reduce([], fn validator, acc ->
case apply(validator, [schema]) do
:ok -> acc
{:error, message} -> [message | acc]
end
end)
end
## Specific validations
# if :type is missing or nil, :properties are ignored and the nested schemas are not validated
defp validate_type_key(%Schema{properties: %{}, type: type}) do
case type do
:object -> :ok
nil -> {:error, ":properties provided, but :type is missing or nil (expected :object)"}
type -> {:error, ":properties provided, but :type is #{inspect(type)} (expected :object)"}
end
end
defp validate_type_key(_), do: :ok
end