tuple_to_list is now replaced by a constructor and the "convenience" functions will be moved to apps/aefate tests were they are needed
This commit is contained in:
parent
e1e2236a26
commit
0261b76314
@ -94,14 +94,10 @@
|
|||||||
, make_channel/1
|
, make_channel/1
|
||||||
, make_bits/1
|
, make_bits/1
|
||||||
, make_unit/0
|
, make_unit/0
|
||||||
, tuple_to_list/1
|
|
||||||
, decode/1
|
|
||||||
, encode/1
|
|
||||||
]).
|
]).
|
||||||
-export([format/1]).
|
-export([format/1]).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
make_boolean(true) -> ?FATE_TRUE;
|
make_boolean(true) -> ?FATE_TRUE;
|
||||||
make_boolean(false) -> ?FATE_FALSE.
|
make_boolean(false) -> ?FATE_FALSE.
|
||||||
make_list([]) -> ?FATE_NIL;
|
make_list([]) -> ?FATE_NIL;
|
||||||
@ -138,68 +134,7 @@ make_variant(Arities, Tag, Values) ->
|
|||||||
end
|
end
|
||||||
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 = <<I:256>>, 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 = <<I:256>>, 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 = <<I:256>>, 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 = <<I:256>>, 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 = <<I:256>>, 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:256>>)) -> {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().
|
-spec format(fate_type()) -> iolist().
|
||||||
format(I) when ?IS_FATE_INTEGER(I) -> integer_to_list(?MAKE_FATE_INTEGER(I));
|
format(I) when ?IS_FATE_INTEGER(I) -> integer_to_list(?MAKE_FATE_INTEGER(I));
|
||||||
@ -257,13 +192,3 @@ format_list(List) ->
|
|||||||
|
|
||||||
format_kvs(List) ->
|
format_kvs(List) ->
|
||||||
lists:join(", ", [ [format(K), " => ", format(V)] || {K, V} <- 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.
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user