Current section
Files
Jump to
Current section
Files
lib/avro_ex/schema/fixed.ex
defmodule AvroEx.Schema.Fixed do
use Ecto.Schema
require AvroEx.Schema.Macros, as: SchemaMacros
import Ecto.Changeset
alias AvroEx.Schema.Context
alias AvroEx.Schema
embedded_schema do
field(:aliases, {:array, :string}, default: [])
field(:metadata, {:map, :string}, default: %{})
field(:name, :string)
field(:namespace, :string)
field(:qualified_names, {:array, :string}, default: [])
field(:size, :integer)
end
@type t :: %__MODULE__{
aliases: [Schema.alias()],
metadata: %{String.t() => String.t()},
name: Schema.name(),
namespace: Schema.namespace(),
size: integer
}
@required_fields [:name, :size]
@optional_fields [:aliases, :metadata, :namespace]
SchemaMacros.cast_schema(data_fields: [:aliases, :name, :namespace, :size, :qualified_names])
def changeset(%__MODULE__{} = fixed, %{"type" => "fixed"} = params) do
fixed
|> cast(params, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
end
@spec match?(t, Context.t(), term) :: boolean
def match?(%__MODULE__{size: size}, %Context{}, data)
when is_binary(data) and byte_size(data) == size do
true
end
def match?(_, _, _), do: false
end