1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use super::{
meta_config::MetaConfig, meta_validate_abi::validate_abi, output_contract::OutputContractConfig,
};
use crate::{
cli_args::{ContractCliAction, ContractCliArgs, StandaloneCliAction, StandaloneCliArgs},
sc_upgrade::upgrade_sc,
};
use clap::Parser;
use multiversx_sc::contract_base::ContractAbiProvider;
pub fn cli_main_standalone() {
let cli_args = StandaloneCliArgs::parse();
#[allow(clippy::single_match)]
match cli_args.command {
Some(StandaloneCliAction::Upgrade(args)) => {
upgrade_sc(&args);
},
None => {},
}
}
pub fn cli_main<AbiObj: ContractAbiProvider>() {
let cli_args = ContractCliArgs::parse();
let mut meta_config_opt = process_abi::<AbiObj>(&cli_args);
match cli_args.command {
ContractCliAction::Abi => {},
ContractCliAction::Build(build_args) => meta_config_opt.build(build_args),
ContractCliAction::BuildDbg(build_args) => meta_config_opt.build(build_args.into_dbg()),
ContractCliAction::Twiggy(build_args) => meta_config_opt.build(build_args.into_twiggy()),
ContractCliAction::Clean => meta_config_opt.clean(),
ContractCliAction::GenerateSnippets(gs_args) => {
meta_config_opt.generate_rust_snippets(&gs_args)
},
}
}
fn process_abi<AbiObj: ContractAbiProvider>(cli_args: &ContractCliArgs) -> MetaConfig {
let input_abi = <AbiObj as ContractAbiProvider>::abi();
validate_abi(&input_abi).expect("Invalid contract structure");
let mut meta_config = MetaConfig::create(input_abi, cli_args.load_abi_git_version);
meta_config.write_abi();
meta_config.generate_wasm_crates();
meta_config
}
pub fn multi_contract_config<AbiObj: ContractAbiProvider>(
multi_contract_config_toml_path: &str,
) -> OutputContractConfig {
let original_contract_abi = <AbiObj as ContractAbiProvider>::abi();
validate_abi(&original_contract_abi).expect("Invalid contract structure");
OutputContractConfig::load_from_file(multi_contract_config_toml_path, &original_contract_abi)
.unwrap_or_else(|| panic!("could not find file {multi_contract_config_toml_path}"))
}