Get rid of size from varaint type representation.

This commit is contained in:
Erik Stenman 2019-03-01 12:38:23 +01:00
parent 1af6106eb4
commit 29630dab61
2 changed files with 10 additions and 16 deletions

View File

@ -581,7 +581,7 @@ deserialize_type(<<7, Rest/binary>>) ->
{string, Rest}; {string, Rest};
deserialize_type(<<8, Size, Rest/binary>>) -> deserialize_type(<<8, Size, Rest/binary>>) ->
{Variants, Rest2} = deserialize_variants(Size, Rest, []), {Variants, Rest2} = deserialize_variants(Size, Rest, []),
{{variant, Size, Variants}, Rest2}. {{variant, Variants}, Rest2}.
deserialize_variants(0, Rest, Variants) -> deserialize_variants(0, Rest, Variants) ->
{lists:reverse(Variants), Rest}; {lists:reverse(Variants), Rest};
@ -783,17 +783,11 @@ to_type([{'{', _}, {id, _, "map"}, {',', _} | Rest]) ->
to_type([{'{', _} to_type([{'{', _}
, {id, _, "variant"} , {id, _, "variant"}
, {',', _} , {',', _}
, {int, _, Size}
, {',', _}
, {'[', _} , {'[', _}
| Rest]) when Size > 0 | Rest]) ->
, Size < 256 ->
{ElementTypes, [{'}', _}| Rest2]} = to_list_of_types(Rest),
%% TODO: Error handling %% TODO: Error handling
if Size =:= length(ElementTypes) -> {ElementTypes, [{'}', _}| Rest2]} = to_list_of_types(Rest),
{{variant, Size, ElementTypes}, Rest2} {{variant, ElementTypes}, Rest2}.
end.
to_list_of_types([{']', _} | Rest]) -> {[], Rest}; to_list_of_types([{']', _} | Rest]) -> {[], Rest};
@ -819,11 +813,11 @@ serialize_type(address) -> [4];
serialize_type(bits) -> [5]; serialize_type(bits) -> [5];
serialize_type({map, K, V}) -> [6 | serialize_type(K) ++ serialize_type(V)]; serialize_type({map, K, V}) -> [6 | serialize_type(K) ++ serialize_type(V)];
serialize_type(string) -> [7]; serialize_type(string) -> [7];
serialize_type({variant, Size, ListOfVariants}) serialize_type({variant, ListOfVariants}) ->
when Size > 0 Size = length(ListOfVariants),
, Size < 256 if Size < 256 ->
, Size =:= length(ListOfVariants) -> [8, Size | [serialize_type(T) || T <- ListOfVariants]]
[8, Size | [serialize_type(T) || T <- ListOfVariants]]. end.
%% ------------------------------------------------------------------- %% -------------------------------------------------------------------

View File

@ -69,5 +69,5 @@ FUNCTION address() : address
RETURNR #deadbeef RETURNR #deadbeef
;; Option(integer) = NONE | SOME(integer) ;; Option(integer) = NONE | SOME(integer)
FUNCTION varaint() : {variant, 2, [{tuple, []}, {tuple, [integer]}]} FUNCTION varaint() : {variant, [{tuple, []}, {tuple, [integer]}]}
RETURNR #deadbeef RETURNR #deadbeef