Current section

Files

Jump to
nldoc_spec_event lib nldoc spec event error.ex
Raw

lib/nldoc/spec/event/error.ex

defmodule NLdoc.Spec.Event.Error do
@moduledoc """
This module defines the Ecto schema for the NLdoc Event 'error'.
"""
use NLdoc.SpecDef.Schema, type: "https://event.spec.nldoc.nl/error"
defmodule InvalidContentTypeContext do
@moduledoc false
use NLdoc.SpecDef.Schema, type: nil
@code "invalid_content_type"
typed_embedded_schema null: false do
field :code, :string, default: @code
field :actual, :string
field :expected, {:array, :string}
end
def changeset(object, attrs) do
fields = [:code, :actual, :expected]
object
|> cast(attrs, fields, @cast_opts)
|> validate_required(fields)
|> validate_inclusion(:code, [@code])
|> validate_length(:expected, min: 1)
end
end
defmodule TooManyPagesContext do
@moduledoc false
use NLdoc.SpecDef.Schema, type: nil
@code "too_many_pages"
typed_embedded_schema null: false do
field :code, :string, default: @code
field :actual, :integer
field :limit, :integer
end
def changeset(object, attrs) do
fields = [:code, :actual, :limit]
object
|> cast(attrs, fields, @cast_opts)
|> validate_required(fields)
|> validate_inclusion(:code, [@code])
end
end
defmodule UnexpectedContext do
@moduledoc false
use NLdoc.SpecDef.Schema, type: nil
@code "unexpected"
typed_embedded_schema null: false do
field :code, :string, default: @code
end
def changeset(object, attrs) do
object
|> cast(attrs, [:code], @cast_opts)
|> validate_required([:code])
|> validate_inclusion(:code, [@code])
end
end
typed_embedded_schema null: false do
field :type, :string, default: @resource_type
field :timestamp, :utc_datetime
field :trace_id, :string
polymorphic_embeds_one :context,
types: [
invalid_content_type: InvalidContentTypeContext,
too_many_pages: TooManyPagesContext,
unexpected: UnexpectedContext
],
type_field_name: :code,
on_replace: :update
end
def changeset(object, attrs) do
fields = [:type, :timestamp, :trace_id]
object
|> cast(attrs, fields, @cast_opts)
|> cast_polymorphic_embed(:context, @cast_opts)
|> validate_required([:context] ++ fields)
|> validate_inclusion(:type, [@resource_type])
end
end