New release
Euneus v2.0 is out!
This version completely rewrites Euneus on top of the new OTP json module. The json_polyfill lib is required for OTP versions below 27.
The minimum OTP version is 24.
Changes
All modules received a new interface.
Many changes were made based on this issue (many thanks to all contributors o/).
Encode
Encode functions available:
The euneus_encoder options:
-type options() :: #{
codecs => [codec()],
nulls => [term()],
skip_values => [term()],
key_to_binary => fun((term()) -> binary()),
sort_keys => boolean(),
proplists => boolean() | {true, is_proplist()},
escape => fun((binary()) -> iodata()),
encode_integer => encode(integer()),
encode_float => encode(float()),
encode_atom => encode(atom()),
encode_list => encode(list()),
encode_map => encode(map()),
encode_tuple => encode(tuple()),
encode_pid => encode(pid()),
encode_port => encode(port()),
encode_reference => encode(reference())
}.
-type codec() ::
timestamp
| datetime
| ipv4
| ipv6
| {records, #{Name :: atom() := {Fields :: [atom()], Size :: pos_integer()}}}
| codec_callback().
-export_type([codec/0]).
-type codec_callback() :: fun((tuple()) -> next | {halt, term()}).
-type is_proplist() :: fun((list()) -> boolean()).
-type encode(Type) :: fun((Type, json:encoder(), state()) -> iodata()).
Please see the encoder documentation for further information and examples.
Decode
Decode functions available:
The euneus_decoder options:
-type options() :: #{
codecs => [codec()],
null => term(),
binary_to_float => json:from_binary_fun(),
binary_to_integer => json:from_binary_fun(),
array_start => json:array_start_fun(),
array_push => json:array_push_fun(),
array_finish =>
ordered
| reversed
| json:array_finish_fun(),
object_start => json:object_start_fun(),
object_keys =>
binary
| copy
| atom
| existing_atom
| json:from_binary_fun(),
object_push => json:object_push_fun(),
object_finish =>
map
| proplist
| reversed_proplist
| json:object_finish_fun()
}.
-type codec() ::
copy
| timestamp
| datetime
| ipv4
| ipv6
| pid
| port
| reference
| codec_callback().
-type codec_callback() :: fun((binary()) -> next | {halt, term()}).
Please see the decoder documentation for further information and examples.
Formatter
Format functions available:
The euneus_formatter options:
-type options() :: #{
indent_type := tabs | spaces,
indent_width := non_neg_integer(),
spaced_values := boolean(),
crlf := crlf()
}.
-type crlf() :: r | n | rn | none.
Please see the formatter documentation for further information and examples.
Please give it a try, and don’t hesitate to join the project on the Euneus repository or jump into this thread and share your suggestions. Thank you!