From 409d761b186e39fa2f8f168e8e1228b7bd6c3862 Mon Sep 17 00:00:00 2001 From: Ulf Norell Date: Wed, 5 Jun 2019 11:13:34 +0200 Subject: [PATCH] Add serialization of any and type variables --- src/aeb_fate_encoding.erl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/aeb_fate_encoding.erl b/src/aeb_fate_encoding.erl index 047b539..c324124 100644 --- a/src/aeb_fate_encoding.erl +++ b/src/aeb_fate_encoding.erl @@ -78,8 +78,8 @@ %% 1011 0111 %% 1100 0111 %% 1101 0111 - %% 1110 0111 - %% 1111 0111 +-define(TYPE_VAR , 2#11100111). %% 1110 0111 | Id when 0 =< Id < 256 (type variable) +-define(TYPE_ANY , 2#11110111). %% 1111 0111 - Any typedef -define(LONG_TUPLE , 2#00001011). %% 0000 1011 | RLP encoded (size - 16) | [encoded elements], -define(SHORT_TUPLE , 2#1011). %% xxxx 1011 | [encoded elements] when 0 < size < 16 %% 1111 Set below @@ -208,6 +208,8 @@ serialize(?FATE_VARIANT(Arities, Tag, Values)) -> -spec serialize_type(aeb_fate_data:fate_type_type()) -> [byte()]. serialize_type(integer) -> [?TYPE_INTEGER]; serialize_type(boolean) -> [?TYPE_BOOLEAN]; +serialize_type(any) -> [?TYPE_ANY]; +serialize_type({tvar, N}) when 0 =< N, N =< 255 -> [?TYPE_VAR, N]; serialize_type({list, T}) -> [?TYPE_LIST | serialize_type(T)]; serialize_type({tuple, Ts}) -> case length(Ts) of @@ -235,6 +237,8 @@ serialize_type({variant, ListOfVariants}) -> -spec deserialize_type(binary()) -> {aeb_fate_data:fate_type_type(), binary()}. deserialize_type(<>) -> {integer, Rest}; deserialize_type(<>) -> {boolean, Rest}; +deserialize_type(<>) -> {any, Rest}; +deserialize_type(<>) -> {{tvar, Id}, Rest}; deserialize_type(<>) -> {T, Rest2} = deserialize_type(Rest), {{list, T}, Rest2};