View Source ElixirAvro.AvroType.Value.Decoder (elixir_avro v0.1.0)
Module responsible for decoding values from Avro type definition.
Summary
Functions
Decodes any avro value into its elixir format; raise if an error occurs.
Functions
@spec decode_value!(any(), ElixirAvro.AvroType.t(), String.t()) :: any() | no_return()
Decodes any avro value into its elixir format; raise if an error occurs.
Examples
Primitive types
iex> decode_value!(nil, %Primitive{name: "null"}, "") nil
iex> decode_value!(true, %Primitive{name: "boolean"}, "") true
iex> decode_value!(25, %Primitive{name: "int"}, "") 25
iex> decode_value!(2_147_483_648, %Primitive{name: "int"}, "") ** (ArgumentError) decoding error: value out of range
iex> decode_value!(19723, %Primitive{name: "int", custom_props: [%CustomProp{name: "logicalType", value: "date"}]}, "") ~D[2024-01-01]
iex> decode_value!(3661123, %Primitive{name: "int", custom_props: [%CustomProp{name: "logicalType", value: "time-millis"}]}, "") ~T[01:01:01.123]
iex> decode_value!(202.35, %Primitive{name: "int", custom_props: [%CustomProp{name: "logicalType", value: "date"}]}, "") ** (ArgumentError) decoding error: not an integer value
iex> decode_value!(25699000123, %Primitive{name: "long", custom_props: [%CustomProp{name: "logicalType", value: "time-micros"}]}, "") ~T[07:08:19.000123]
iex> decode_value!(1704070923000, %Primitive{name: "long", custom_props: [%CustomProp{name: "logicalType", value: "timestamp-millis"}]}, "") ~U[2024-01-01 01:02:03.000Z]
iex> decode_value!(1263423607005000, %Primitive{name: "long", custom_props: [%CustomProp{name: "logicalType", value: "local-timestamp-micros"}]}, "") ~N[2010-01-13 23:00:07.005000]
iex> decode_value!("2024-01-13 11:00:03.123", %Primitive{name: "long", custom_props: [%CustomProp{name: "logicalType", value: "timestamp-micros"}]}, "") ** (ArgumentError) decoding error: not an integer value
iex> decode_value!("67caff17-798d-4b70-b9d0-781d27382fdc", %Primitive{name: "string", custom_props: [%CustomProp{name: "logicalType", value: "uuid"}]}, "") "67caff17-798d-4b70-b9d0-781d27382fdc"
iex> decode_value!("not-a-uuid", %Primitive{name: "string", custom_props: [%CustomProp{name: "logicalType", value: "uuid"}]}, "") ** (ArgumentError) decoding error: not a uuid value
Array types
iex> decode_value!(["one", "two"], %Array{type: %Primitive{name: "string"}}, "") ["one", "two"]
iex> decode_value!(["one", 2], %Array{type: %Primitive{name: "string"}}, "") ** (ArgumentError) decoding error: not a string value
Map types
iex> decode_value!(%{"one" => 1, "two" => 2}, %Map{type: %Primitive{name: "int"}}, "") %{"one" => 1, "two" => 2}
iex> decode_value!(%{"one" => 1, "two" => "2"}, %Map{type: %Primitive{name: "int"}}, "") ** (ArgumentError) decoding error: not an integer value
Union types
iex> decode_value!( ...> nil, ...> %Union{values: %{ ...> 0 => %Primitive{name: "null"}, ...> 1 => %Primitive{name: "string", custom_props: [%CustomProp{name: "logicalType", value: "uuid"}]} ...> }}, "") nil
iex> decode_value!( ...> "d8d8d536-700d-4773-a950-90fdcd3ae686", ...> %Union{values: %{ ...> 0 => %Primitive{name: "null"}, ...> 1 => %Primitive{name: "string", custom_props: [%CustomProp{name: "logicalType", value: "uuid"}]} ...> }}, "") "d8d8d536-700d-4773-a950-90fdcd3ae686"
iex> decode_value!( ...> "not-a-uuid-or-nil", ...> %Union{values: %{ ...> 0 => %Primitive{name: "null"}, ...> 1 => %Primitive{name: "string", custom_props: [%CustomProp{name: "logicalType", value: "uuid"}]} ...> }}, "") ** (ArgumentError) decoding error: no compatible type found