Encode/decode bytes()/{bytes, any} as bytes(-1)

This commit is contained in:
Hans Svensson 2023-04-13 12:52:56 +02:00
parent 0f7529b26a
commit 72f37ea552

View File

@ -238,6 +238,8 @@ serialize_type({tuple, Ts}) ->
N when N =< 255 -> N when N =< 255 ->
[?TYPE_TUPLE, N | [serialize_type(T) || T <- Ts]] [?TYPE_TUPLE, N | [serialize_type(T) || T <- Ts]]
end; end;
serialize_type({bytes, any}) ->
[?TYPE_BYTES | binary_to_list(serialize_integer(-1))];
serialize_type({bytes, N}) when 0 =< N -> serialize_type({bytes, N}) when 0 =< N ->
[?TYPE_BYTES | binary_to_list(serialize_integer(N))]; [?TYPE_BYTES | binary_to_list(serialize_integer(N))];
serialize_type(address) -> [?TYPE_OBJECT, ?OTYPE_ADDRESS]; serialize_type(address) -> [?TYPE_OBJECT, ?OTYPE_ADDRESS];
@ -270,8 +272,12 @@ deserialize_type(<<?TYPE_TUPLE, N, Rest/binary>>) ->
{{tuple, Ts}, Rest2}; {{tuple, Ts}, Rest2};
deserialize_type(<<?TYPE_BYTES, Rest/binary>>) -> deserialize_type(<<?TYPE_BYTES, Rest/binary>>) ->
{N, Rest2} = deserialize_one(Rest), {N, Rest2} = deserialize_one(Rest),
true = is_integer(N) andalso N >= 0, true = is_integer(N),
{{bytes, N}, Rest2}; if N == -1 ->
{{bytes, any}, Rest2};
0 =< N ->
{{bytes, N}, Rest2}
end;
deserialize_type(<<?TYPE_OBJECT, ObjectType, Rest/binary>>) -> deserialize_type(<<?TYPE_OBJECT, ObjectType, Rest/binary>>) ->
case ObjectType of case ObjectType of
?OTYPE_ADDRESS -> {address, Rest}; ?OTYPE_ADDRESS -> {address, Rest};