Avrora.Encoder (avrora v0.18.1) View Source

Wraps internal codec interface to add syntax sugar which will be exposed to client.

Link to this section Summary

Functions

Decode binary Avro message, loading schema from Schema Registry or Object Container Files.

Decode binary Avro message, loading schema from local file or Schema Registry.

Decode binary Avro message with a :plain format and load schema from local file.

Encode message map in Avro format, loading schema from local file or Schema Registry.

Encode binary Avro message with a :plain format and load schema from local file.

Extract schema from the binary Avro message.

Link to this section Functions

Specs

decode(binary()) :: {:ok, map() | [map()]} | {:error, term()}

Decode binary Avro message, loading schema from Schema Registry or Object Container Files.

Examples

...> payload = <<0, 0, 0, 0, 8, 72, 48, 48, 48, 48, 48, 48, 48, 48, 45, 48,
48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 123, 20, 174, 71, 225, 250, 47, 64>>
...> Avrora.Encoder.decode(payload)
{:ok, %{"id" => "00000000-0000-0000-0000-000000000000", "amount" => 15.99}}

Specs

decode(binary(), [{:schema_name, String.t()}]) ::
  {:ok, map() | [map()]} | {:error, term()}

Decode binary Avro message, loading schema from local file or Schema Registry.

Examples

...> payload = <<72, 48, 48, 48, 48, 48, 48, 48, 48, 45, 48, 48, 48, 48, 45,
48, 48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 123, 20, 174, 71, 225, 250, 47, 64>>
...> Avrora.Encoder.decode(payload, schema_name: "io.confluent.Payment")
{:ok, %{"id" => "00000000-0000-0000-0000-000000000000", "amount" => 15.99}}
Link to this function

decode_plain(payload, list)

View Source

Specs

decode_plain(binary(), [{:schema_name, String.t()}]) ::
  {:ok, map()} | {:error, term()}

Decode binary Avro message with a :plain format and load schema from local file.

Examples

...> payload = <<0, 232, 220, 144, 233, 11, 200, 1>>
...> Avrora.Encoder.decode_plain(payload,"io.confluent.NumericTransfer")
{:ok, %{"link_is_enabled" => false, "updated_at" => 1586632500, "updated_by_id" => 100}

Specs

encode(map(),
  schema_name: String.t(),
  format: :guess | :registry | :ocf | :plain
) :: {:ok, binary()} | {:error, term()}

Encode message map in Avro format, loading schema from local file or Schema Registry.

The :format argument controls output format:

  • :plain - Just return Avro binary data, with no header or embedded schema
  • :ocf - Use [Object Container File]https://avro.apache.org/docs/1.8.1/spec.html#Object+Container+Files) format, embedding the full schema with the data
  • :registry - Write data with Confluent Schema Registry Wire Format, which prefixes the data with the schema id
  • :guess - Use :registry if possible, otherwise use :ocf (default)

Examples

...> payload = %{"id" => "00000000-0000-0000-0000-000000000000", "amount" => 15.99}
...> Avrora.Encoder.encode(payload, schema_name: "io.confluent.Payment", format: :plain)
{:ok, <<72, 48, 48, 48, 48, 48, 48, 48, 48, 45, 48, 48, 48, 48, 45,
      48, 48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 48, 48, 48, 48, 48,
      48, 48, 48, 123, 20, 174, 71, 225, 250, 47, 64>>}
Link to this function

encode_plain(payload, list)

View Source

Specs

encode_plain(map(), [{:schema_name, String.t()}]) ::
  {:ok, binary()} | {:error, term()}

Encode binary Avro message with a :plain format and load schema from local file.

Examples

...> payload = %{"link_is_enabled" => false, "updated_at" => 1586632500, "updated_by_id" => 100}
...> Avrora.Encoder.encode_plain(payload,"io.confluent.NumericTransfer")
{:ok, <<0, 232, 220, 144, 233, 11, 200, 1>>}

Specs

extract_schema(binary()) :: {:ok, Avrora.Schema.t()} | {:error, term()}

Extract schema from the binary Avro message.

Examples

...> payload = <<0, 0, 0, 0, 8, 72, 48, 48, 48, 48, 48, 48, 48, 48, 45, 48,
48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 45, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 123, 20, 174, 71, 225, 250, 47, 64>>
...> {:ok, schema} = Avrora.Encoder.extract_schema(payload)
...> schema.id
42
...> schema.full_name
"io.confluent.Payment"