AvroEx.Schema (AvroEx v2.2.1)

Copy Markdown View Source

Summary

Types

alias()

@type alias() :: name()

doc()

@type doc() :: nil | String.t()

full_name()

@type full_name() :: String.t()

json_schema()

@type json_schema() :: String.t()

metadata()

@type metadata() :: %{required(String.t()) => String.t()}

name()

@type name() :: String.t()

named_type()

namespace()

@type namespace() :: nil | String.t()

schema_types()

t()

@type t() :: %AvroEx.Schema{
  context: AvroEx.Schema.Context.t(),
  schema: schema_types() | nil
}

Functions

encodable?(schema, data)

@spec encodable?(t(), any()) :: boolean()

encodable?(record, context, bool)

@spec encodable?(any(), any(), any()) :: boolean()

full_name(schema, parent_namespace \\ nil)

@spec full_name(schema_types() | name(), namespace()) :: nil | String.t()

The fully-qualified name of the type

Examples

iex> full_name(%Primitive{type: "string"})
nil

iex> full_name(%Record{name: "foo", namespace: "beam.community"})
"beam.community.foo"

iex> full_name(%Record{name: "foo"}, "top.level.namespace")
"top.level.namespace.foo"

namespace(schema, parent_namespace \\ nil)

@spec namespace(schema_types(), namespace()) :: namespace()

The namespace of the given Schema type

Examples

iex> namespace(%Primitive{type: :string})
nil

iex> namespace(%Record{name: "MyRecord"}, "namespace")
"namespace"

iex> namespace(%Record{name: "MyRecord", namespace: "inner"}, "namespace")
"inner"

iex> namespace(%Record{name: "qualified.MyRecord", namespace: "inner"}, "namespace")
"qualified"

type_name(record)

@spec type_name(schema_types()) :: String.t()

The name of the schema type

Examples

iex> type_name(%Primitive{type: "string"})
"string"

iex> type_name(%Primitive{type: :long, metadata: %{"logicalType" => "timestamp-millis"}})
"timestamp-millis"

iex> type_name(%AvroEnum{name: "switch", symbols: []})
"Enum<name=switch>"

iex> type_name(%Array{items: %Primitive{type: "int"}})
"Array<items=int>"

iex> type_name(%Fixed{size: 2, name: "double"})
"Fixed<name=double, size=2>"

iex> type_name(%Union{possibilities: [%Primitive{type: "string"}, %Primitive{type: "int"}]})
"Union<possibilities=string|int>"

iex> type_name(%Record{name: "foo"})
"Record<name=foo>"

iex> type_name(%Reference{type: "foo"})
"Reference<name=foo>"