From add82fe5eedfa09b08329b349930f5beb9238b8f Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Thu, 16 Mar 2023 16:12:45 +0900 Subject: [PATCH] Package for ZX/Zomp --- Emakefile | 1 + src/aeso_aci.erl | 37 +++++++++++++++++++++++++++++++------ zomp.meta | 20 ++++++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 Emakefile create mode 100644 zomp.meta diff --git a/Emakefile b/Emakefile new file mode 100644 index 0000000..68c7b67 --- /dev/null +++ b/Emakefile @@ -0,0 +1 @@ +{"src/*", [debug_info, {i, "include/"}, {outdir, "ebin/"}]}. diff --git a/src/aeso_aci.erl b/src/aeso_aci.erl index d0c7c68..273b125 100644 --- a/src/aeso_aci.erl +++ b/src/aeso_aci.erl @@ -221,16 +221,41 @@ do_render_aci_json(Json) -> case Json of JArray when is_list(JArray) -> JArray; JObject when is_map(JObject) -> [JObject]; - JText when is_binary(JText) -> - case jsx:decode(Json, [{labels, atom}, return_maps]) of - JArray when is_list(JArray) -> JArray; - JObject when is_map(JObject) -> [JObject]; - _ -> error(bad_aci_json) - end + JText when is_binary(JText) -> decode(JText) end, DecodedContracts = [ decode_contract(C) || C <- Contracts ], {ok, list_to_binary(string:join(DecodedContracts, "\n"))}. + +decode(JSON) -> + case code:is_loaded(jsx) of + {file, _} -> + case jsx:decode(JSON, [{labels, atom}, return_maps]) of + JArray when is_list(JArray) -> JArray; + JObject when is_map(JObject) -> [JObject]; + _ -> error(bad_aci_json) + end; + false -> + case zj:binary_decode(JSON) of + {ok, Decoded} when is_list(Decoded) -> atomize(Decoded); + {ok, Decoded} when is_map(Decoded) -> [atomize(Decoded)]; + _ -> error(bad_aci_json) + end + end. + +atomize(T) when is_map(T) -> + maps:fold(fun atomize/3, #{}, T); +atomize(T) when is_list(T) -> + lists:map(fun atomize/1, T); +atomize(T) -> + T. + +atomize(K, V, M) when is_binary(K) -> + maps:put(binary_to_atom(K), atomize(V), M); +atomize(K, V, M) -> + maps:put(K, V, M). + + decode_contract(#{contract := #{name := Name, kind := Kind, payable := Payable, diff --git a/zomp.meta b/zomp.meta new file mode 100644 index 0000000..caf7fad --- /dev/null +++ b/zomp.meta @@ -0,0 +1,20 @@ +{a_email,[]}. +{author,"Aeternity Foundation"}. +{c_email,[]}. +{copyright,"Aeternity Foundation"}. +{deps,[{"otpr","aebytecode",{3,2,0}}, + {"otpr","getopt",{1,0,2}}, + {"otpr","eblake2",{1,0,0}}, + {"otpr","zj",{1,1,0}}]}. +{desc,"The Sophia contract language compiler for Aeternity."}. +{file_exts,[]}. +{key_name,none}. +{license,skip}. +{modules,[]}. +{name,"AE Sophia Compiler"}. +{package_id,{"otpr","aesophia",{7,1,0}}}. +{prefix,none}. +{repo_url,"https://github.com/aeternity/aesophia"}. +{tags,["aeternity","blockchain","sophia","crypto","ae","compiler"]}. +{type,lib}. +{ws_url,[]}.