Compare commits
No commits in common. "0288719ae15814f3a53114c657502a24376bebfa" and "0d77ca038811efdfe6d7768ee1dd59e51d3e5fba" have entirely different histories.
0288719ae1
...
0d77ca0388
@ -330,13 +330,13 @@ encode_from_template(Type, List, E, Vsn, Types) when is_list(Type), is_list(List
|
|||||||
encode_fields(Type, List, E, Vsn, Types);
|
encode_fields(Type, List, E, Vsn, Types);
|
||||||
encode_from_template(label, V, E, _, Types) ->
|
encode_from_template(label, V, E, _, Types) ->
|
||||||
assert_type(is_atom(V), label, V),
|
assert_type(is_atom(V), label, V),
|
||||||
case find_cached_label(V, Types) of
|
emit(E, label, Types,
|
||||||
error ->
|
case find_cached_label(V, Types) of
|
||||||
encode_basic(label, V, E, Types);
|
error ->
|
||||||
{ok, Code} when is_integer(Code) ->
|
encode_basic(label, V, E, Types);
|
||||||
emit(E, label, Types,
|
{ok, Code} when is_integer(Code) ->
|
||||||
[encode_basic(int, Code)])
|
[encode_basic(int, Code)]
|
||||||
end;
|
end);
|
||||||
encode_from_template(Type, V, E, _, Types) when Type == id
|
encode_from_template(Type, V, E, _, Types) when Type == id
|
||||||
; Type == binary
|
; Type == binary
|
||||||
; Type == bool
|
; Type == bool
|
||||||
@ -461,14 +461,11 @@ register_types(Types) when is_map(Types) ->
|
|||||||
Rev = rev_codes(Codes),
|
Rev = rev_codes(Codes),
|
||||||
Templates = maps:get(templates, Types, #{}),
|
Templates = maps:get(templates, Types, #{}),
|
||||||
Labels = maps:get(labels, Types, #{}),
|
Labels = maps:get(labels, Types, #{}),
|
||||||
Options = maps:get(options, Types, #{}),
|
#{codes := Codes0, rev := Rev0, labels := Labels0, templates := Templates0} =
|
||||||
#{codes := Codes0, rev := Rev0, labels := Labels0,
|
|
||||||
templates := Templates0, options := Options0} =
|
|
||||||
dynamic_types(),
|
dynamic_types(),
|
||||||
Merged = #{ codes => maps:merge(Codes0, Codes)
|
Merged = #{ codes => maps:merge(Codes0, Codes)
|
||||||
, rev => maps:merge(Rev0, Rev)
|
, rev => maps:merge(Rev0, Rev)
|
||||||
, templates => maps:merge(Templates0, Templates)
|
, templates => maps:merge(Templates0, Templates)
|
||||||
, options => maps:merge(Options0, Options)
|
|
||||||
, labels => maps:merge(Labels0, Labels) },
|
, labels => maps:merge(Labels0, Labels) },
|
||||||
assert_sizes(Merged),
|
assert_sizes(Merged),
|
||||||
assert_mappings(Merged),
|
assert_mappings(Merged),
|
||||||
@ -653,7 +650,6 @@ user_types_test_() ->
|
|||||||
, ?_test(t_reg_template_vsnd_fun())
|
, ?_test(t_reg_template_vsnd_fun())
|
||||||
, ?_test(t_reg_label_cache())
|
, ?_test(t_reg_label_cache())
|
||||||
, ?_test(t_reg_label_cache2())
|
, ?_test(t_reg_label_cache2())
|
||||||
, ?_test(t_reg_options())
|
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
dynamic_types_test_() ->
|
dynamic_types_test_() ->
|
||||||
@ -661,7 +657,6 @@ dynamic_types_test_() ->
|
|||||||
, ?_test(t_typed_map())
|
, ?_test(t_typed_map())
|
||||||
, ?_test(t_alts())
|
, ?_test(t_alts())
|
||||||
, ?_test(t_anyints())
|
, ?_test(t_anyints())
|
||||||
, ?_test(t_missing_labels())
|
|
||||||
].
|
].
|
||||||
|
|
||||||
t_round_trip(T) ->
|
t_round_trip(T) ->
|
||||||
@ -755,13 +750,6 @@ t_reg_label_cache2() ->
|
|||||||
[<<0>>,<<1>>,[<<3,235>>,[[<<49>>],[<<49>>]]]] = Enc,
|
[<<0>>,<<1>>,[<<3,235>>,[[<<49>>],[<<49>>]]]] = Enc,
|
||||||
_Tup = gmser_dyn:decode(Enc).
|
_Tup = gmser_dyn:decode(Enc).
|
||||||
|
|
||||||
t_reg_options() ->
|
|
||||||
register_types(set_opts(#{missing_labels => convert})),
|
|
||||||
[Dyn,Vsn,[Am,<<"random">>]] = gmser_dyn:encode(random),
|
|
||||||
EncNewAm = [Dyn,Vsn,[Am,<<"foo12345">>]],
|
|
||||||
<<"foo12345">> = gmser_dyn:decode(EncNewAm),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
t_typed_map() ->
|
t_typed_map() ->
|
||||||
Term = #{a => 13, {key,1} => [a]},
|
Term = #{a => 13, {key,1} => [a]},
|
||||||
Enc = encode_typed(#{items => [{a,int},{{key,1},[label]}]}, Term),
|
Enc = encode_typed(#{items => [{a,int},{{key,1},[label]}]}, Term),
|
||||||
@ -777,13 +765,4 @@ t_anyints() ->
|
|||||||
t_round_trip_typed(anyint, 5),
|
t_round_trip_typed(anyint, 5),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_missing_labels() ->
|
|
||||||
[Dyn,Vsn,[Am,<<"random">>]] = gmser_dyn:encode(random),
|
|
||||||
EncNewAm = [Dyn,Vsn,[Am,<<"flurbee">>]],
|
|
||||||
?assertError(badarg, gmser_dyn:decode(EncNewAm)),
|
|
||||||
?assertError(badarg, gmser_dyn:decode(EncNewAm, set_opts(#{missing_labels => fail}))),
|
|
||||||
<<"flurbee">> = gmser_dyn:decode(EncNewAm, set_opts(#{missing_labels => convert})),
|
|
||||||
true = is_atom(gmser_dyn:decode(EncNewAm, set_opts(#{missing_labels => create}))),
|
|
||||||
ok.
|
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user