defmodule Z.Issue do
@moduledoc """
The Issue struct
"""
defstruct [:code, :message, :path]
@type t :: %Z.Issue{
code: String.t(),
message: String.t(),
path: [String.t()]
}
def new(code, message, context) do
%Z.Issue{
code: code,
message: message,
path: context.path |> Enum.reverse()
}
end
end
defmodule Z.Error do
@moduledoc """
The Error struct
"""
defexception message: "invalid", issues: []
@type t :: %Z.Error{
issues: [Z.Issue.t()]
}
defmodule Codes do
@moduledoc """
Static error codes
"""
@invalid_type "invalid_type"
@invalid_literal "invalid_literal"
@custom "custom"
@invalid_union "invalid_union"
@invalid_union_discriminator "invalid_union_discriminator"
@invalid_enum_value "invalid_enum_value"
@unrecognized_keys "unrecognized_keys"
@invalid_arguments "invalid_arguments"
@invalid_return_type "invalid_return_type"
@invalid_date "invalid_date"
@invalid_string "invalid_string"
@too_small "too_small"
@too_big "too_big"
@invalid_intersection_types "invalid_intersection_types"
@not_multiple_of "not_multiple_of"
def invalid_type, do: @invalid_type
def invalid_literal, do: @invalid_literal
def custom, do: @custom
def invalid_union, do: @invalid_union
def invalid_union_discriminator, do: @invalid_union_discriminator
def invalid_enum_value, do: @invalid_enum_value
def unrecognized_keys, do: @unrecognized_keys
def invalid_arguments, do: @invalid_arguments
def invalid_return_type, do: @invalid_return_type
def invalid_date, do: @invalid_date
def invalid_string, do: @invalid_string
def too_small, do: @too_small
def too_big, do: @too_big
def invalid_intersection_types, do: @invalid_intersection_types
def not_multiple_of, do: @not_multiple_of
end
end