diff --git a/src/hocon_tconf.erl b/src/hocon_tconf.erl index 6b9e565..9e9d8f0 100644 --- a/src/hocon_tconf.erl +++ b/src/hocon_tconf.erl @@ -657,7 +657,7 @@ map_field(Type, Schema, Value0, Opts) -> eval_builtin_converter(PlainValue, Type, Opts) -> case is_make_serializable(Opts) of true -> - ensure_bin_str(PlainValue); + ensure_serializable(PlainValue); false -> hocon_schema_builtin:convert(PlainValue, Type) end. @@ -1263,12 +1263,16 @@ eval_arity1_converter(F, V, Opts) -> obfuscate_sensitive_values(#{obfuscate_sensitive_values := true}) -> true; obfuscate_sensitive_values(_) -> false. -ensure_bin_str(Value) when is_list(Value) -> +ensure_serializable(undefined) -> + undefined; +ensure_serializable(Boolean) when is_boolean(Boolean) -> Boolean; +ensure_serializable(Atom) when is_atom(Atom) -> atom_to_binary(Atom, utf8); +ensure_serializable(Value) when is_list(Value) -> case io_lib:printable_unicode_list(Value) of true -> unicode:characters_to_binary(Value, utf8); false -> Value end; -ensure_bin_str(Value) -> +ensure_serializable(Value) -> Value. check_indexed_array(List) -> diff --git a/test/hocon_tconf_tests.erl b/test/hocon_tconf_tests.erl index 4f3d3cc..991e01b 100644 --- a/test/hocon_tconf_tests.erl +++ b/test/hocon_tconf_tests.erl @@ -93,6 +93,17 @@ default_value_test() -> } }, Res + ), + %% check foo and dummy is binary. + ?assertEqual( + #{ + <<"bar">> => + #{ + <<"field1">> => <<"foo">>, + <<"union_with_default">> => <<"dummy">> + } + }, + hocon_tconf:make_serializable(?MODULE, Res, #{}) ). obfuscate_sensitive_values_test() -> @@ -167,7 +178,7 @@ nest_ref_fill_default_test() -> #{ <<"perf">> => #{ - <<"route_lock_type">> => key, + <<"route_lock_type">> => <<"key">>, <<"trie_compaction">> => true }, <<"route_batch_clean">> => false