diff --git a/src/aeb_fate_data.erl b/src/aeb_fate_data.erl index 37e9cd0..e5e07f0 100644 --- a/src/aeb_fate_data.erl +++ b/src/aeb_fate_data.erl @@ -94,14 +94,10 @@ , make_channel/1 , make_bits/1 , make_unit/0 - , tuple_to_list/1 - , decode/1 - , encode/1 ]). -export([format/1]). - make_boolean(true) -> ?FATE_TRUE; make_boolean(false) -> ?FATE_FALSE. make_list([]) -> ?FATE_NIL; @@ -138,68 +134,7 @@ make_variant(Arities, Tag, Values) -> end end. -tuple_to_list(?FATE_TUPLE(T)) -> erlang:tuple_to_list(T). -%% Encode is a convinience function for testing, encoding an Erlang term -%% to a Fate term, but it can not distinguish between e.g. 32-byte strings -%% and addresses. Therfore an extra tuple layer on the erlang side for -%% addresses and bits. -encode({bits, Term}) when is_integer(Term) -> make_bits(Term); -%% TODO: check that each byte is in base58 -encode({address, B}) when is_binary(B) -> make_address(B); -encode({address, I}) when is_integer(I) -> B = <>, make_address(B); -encode({address, S}) when is_list(S) -> - make_address(encode_address(account_pubkey, S)); -encode({hash, H}) when is_binary(H) -> make_hash(H); -encode({hash, H}) when is_list(H) -> make_hash(base64:decode(H)); -encode({signature, S}) when is_binary(S) -> make_signature(S); -encode({signature, S}) when is_list(S) -> - make_signature(encode_address(signature, S)); -encode({contract, B}) when is_binary(B) -> make_contract(B); -encode({contract, I}) when is_integer(I) -> B = <>, make_contract(B); -encode({contract, S}) when is_list(S) -> - make_contract(encode_address(contract_pubkey, S)); -encode({oracle, B}) when is_binary(B) -> make_oracle(B); -encode({oracle, I}) when is_integer(I) -> B = <>, make_oracle(B); -encode({oracle, S}) when is_list(S) -> - make_oracle(encode_address(oracle_pubkey, S)); -encode({name, B}) when is_binary(B) -> make_name(B); -encode({name, I}) when is_integer(I) -> B = <>, make_name(B); -encode({name, S}) when is_list(S) -> - make_name(encode_address(name, S)); -encode({channel, B}) when is_binary(B) -> make_channel(B); -encode({channel, I}) when is_integer(I) -> B = <>, make_channel(B); -encode({channel, S}) when is_list(S) -> - make_channel(encode_address(channel, S)); -encode({variant, Arities, Tag, Values}) -> make_variant(Arities, Tag, Values); -encode(Term) when is_integer(Term) -> make_integer(Term); -encode(Term) when is_boolean(Term) -> make_boolean(Term); -encode(Term) when is_list(Term) -> make_list([encode(E) || E <- Term]); -encode(Term) when is_tuple(Term) -> - make_tuple(list_to_tuple([encode(E) || E <- erlang:tuple_to_list(Term)])); -encode(Term) when is_map(Term) -> - make_map(maps:from_list([{encode(K), encode(V)} || {K,V} <- maps:to_list(Term)])); -encode(Term) when is_binary(Term) -> make_string(Term). - - - -decode(I) when ?IS_FATE_INTEGER(I) -> I; -decode(?FATE_TRUE) -> true; -decode(?FATE_FALSE) -> false; -decode(L) when ?IS_FATE_LIST(L) -> [decode(E) || E <- L]; -decode(?FATE_ADDRESS(<>)) -> {address, Address}; -decode(?FATE_HASH(H)) -> {hash, H}; -decode(?FATE_SIGNATURE(S)) -> {signature, S}; -decode(?FATE_CONTRACT(X)) -> {contract, X}; -decode(?FATE_ORACLE(X)) -> {oracle, X}; -decode(?FATE_NAME(X)) -> {name, X}; -decode(?FATE_CHANNEL(X)) -> {channel, X}; -decode(?FATE_BITS(Bits)) -> {bits, Bits}; -decode(?FATE_TUPLE(T)) -> erlang:list_to_tuple([decode(E) || E <- T]); -decode(?FATE_VARIANT(Arities, Tag, Values)) -> {variant, Arities, Tag, Values}; -decode(S) when ?IS_FATE_STRING(S) -> binary_to_list(S); -decode(M) when ?IS_FATE_MAP(M) -> - maps:from_list([{decode(K), decode(V)} || {K, V} <- maps:to_list(M)]). -spec format(fate_type()) -> iolist(). format(I) when ?IS_FATE_INTEGER(I) -> integer_to_list(?MAKE_FATE_INTEGER(I)); @@ -257,13 +192,3 @@ format_list(List) -> format_kvs(List) -> lists:join(", ", [ [format(K), " => ", format(V)] || {K, V} <- List]). - -encode_address(Type, S) when is_list(S) -> - B = list_to_binary(S), - try aeser_api_encoder:decode(B) of - {Type, Encoding} -> - Encoding; - _ -> erlang:error({bad_address_encoding, Type, S}) - catch _:_ -> - erlang:error({bad_address_encoding, Type, S}) - end.