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