multiversx_sc_meta_lib/
abi_json.rs

1mod build_info_abi_json;
2mod contract_abi_json;
3mod endpoint_abi_json;
4mod esdt_attribute_abi_json;
5mod esdt_attribute_json;
6mod event_abi_json;
7mod type_abi_json;
8
9pub use build_info_abi_json::{BuildInfoAbiJson, RustcAbiJson};
10pub use contract_abi_json::*;
11pub use endpoint_abi_json::*;
12pub use esdt_attribute_abi_json::EsdtAttributeAbiJson;
13pub use esdt_attribute_json::EsdtAttributeJson;
14pub use event_abi_json::*;
15use multiversx_sc::{abi::ContractAbi, contract_base::ContractAbiProvider};
16pub use type_abi_json::*;
17
18/// Function provided for convenience.
19/// Yields the ABI JSON of a contract as string.
20pub fn contract_abi<AbiObj: ContractAbiProvider>() -> String {
21    let abi = <AbiObj as ContractAbiProvider>::abi();
22    let abi_json = ContractAbiJson::from(&abi);
23    serialize_abi_to_json(&abi_json)
24}
25
26/// Function provided for convenience.
27/// Prints the ABI JSON of a contract to console.
28pub fn print_abi<AbiTrait: ContractAbiProvider>() {
29    println!("{}", contract_abi::<AbiTrait>());
30}
31
32/// Same as `contract_abi`, but allows caller to replace the compiler metadata,
33/// so that ABI tests are deterministic and independent on compiler version.
34/// Will return the main contract ABI + view contract ABI.
35pub fn abi_to_json_dummy_environment(contract_abi: &ContractAbi) -> String {
36    let mut abi_json = ContractAbiJson::from(contract_abi);
37    if let Some(build_info) = &mut abi_json.build_info {
38        build_info.contract_crate.git_version = "<git version here>".to_string();
39        build_info.rustc = RustcAbiJson {
40            version: "x.x.x-nightly".to_string(),
41            commit_hash: "<commit hash here>".to_string(),
42            commit_date: "<commit date here>".to_string(),
43            channel: "Channel".to_string(),
44            short: "rustc <version> (<short hash> <date>)".to_string(),
45        };
46    }
47    serialize_abi_to_json(&abi_json)
48}