Packages
avrora
0.17.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.2
0.24.1
0.24.0
0.23.0
0.22.0
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.1
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1-beta
0.1.0-beta
An Elixir library for working with Avro messages conveniently. It supports local schema files and Confluent® schema registry.
Current section
Files
Jump to
Current section
Files
lib/avrora/avro_decoder_options.ex
defmodule Avrora.AvroDecoderOptions do
@moduledoc """
A wrapper with a bit of a login around the `:avro_binary_decoder` and
`:avro_ocf` decoder options.
"""
alias Avrora.Config
@options %{
encoding: :avro_binary,
hook: &__MODULE__.__hook__/4,
is_wrapped: true,
map_type: :map,
record_type: :map
}
@null_type_name "null"
@doc """
A unified erlavro decoder options compatible for both binary and OCF decoders.
"""
def options do
if convert_map_to_proplist(), do: %{@options | map_type: :proplist}, else: @options
end
# NOTE: This is internal module function and should never be used directly
@doc false
def __hook__(type, _sub_name_or_id, data, decode_fun) do
convert = convert_null_values()
cond do
convert == false -> decode_fun.(data)
convert == true && :avro.get_type_name(type) == @null_type_name -> {nil, data}
true -> decode_fun.(data)
end
end
defp convert_null_values, do: Config.self().convert_null_values()
defp convert_map_to_proplist, do: Config.self().convert_map_to_proplist()
end