View Source Avrora.Encoder (avrora v0.25.0)

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

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

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

examples

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}}
@spec decode(binary(), [{:schema_name, String.t()}]) ::
  {:ok, map() | [map()]} | {:error, term()}

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

examples

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
@spec 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

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}
@spec 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

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
@spec 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

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>>}
@spec extract_schema(binary()) :: {:ok, Avrora.Schema.t()} | {:error, term()}

Extract schema from the binary Avro message.

examples

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"