multiversx_sc_meta_lib/cli/
cli_contract_main.rs1use std::path::Path;
2
3use crate::{
4 cli::{ContractCliAction, ContractCliArgs},
5 contract::{meta_config::MetaConfig, sc_config::ScConfig},
6};
7use clap::Parser;
8use multiversx_sc::contract_base::ContractAbiProvider;
9
10pub fn cli_main<AbiObj: ContractAbiProvider>() {
12 let cli_args = ContractCliArgs::parse();
13 let mut meta_config_opt = process_original_abi::<AbiObj>(&cli_args);
14 match cli_args.command {
15 ContractCliAction::Abi => {}
16 ContractCliAction::Build(build_args) => meta_config_opt.build(build_args),
17 ContractCliAction::BuildDbg(build_args) => {
18 meta_config_opt.build(build_args.into_build_args())
19 }
20 ContractCliAction::Twiggy(build_args) => {
21 meta_config_opt.build(build_args.into_build_args())
22 }
23 ContractCliAction::Clean => meta_config_opt.clean(),
24 ContractCliAction::Update => meta_config_opt.update(),
25 ContractCliAction::GenerateSnippets(gs_arg) => {
26 meta_config_opt.generate_rust_snippets(&gs_arg);
27 meta_config_opt.reload_sc_config();
28 meta_config_opt.generate_proxy()
29 }
30 ContractCliAction::GenerateProxies(proxy_args) => {
31 if proxy_args.compare {
32 meta_config_opt.compare_proxy()
33 } else {
34 meta_config_opt.generate_proxy()
35 }
36 }
37 }
38}
39
40fn process_original_abi<AbiObj: ContractAbiProvider>(cli_args: &ContractCliArgs) -> MetaConfig {
41 let input_abi = <AbiObj as ContractAbiProvider>::abi();
42 let mut meta_config = MetaConfig::create(input_abi, cli_args.load_abi_git_version);
43 meta_config.sc_config.validate_contract_variants();
44 meta_config.write_contract_abis();
45 meta_config.write_esdt_attribute_abis();
46 meta_config.generate_wasm_crates();
47 meta_config
48}
49
50pub fn multi_contract_config<AbiObj>(contract_crate_path: &Path) -> ScConfig
51where
52 AbiObj: ContractAbiProvider,
53{
54 let original_contract_abi = <AbiObj as ContractAbiProvider>::abi();
55
56 let sc_config =
57 ScConfig::load_from_crate_or_default(contract_crate_path, &original_contract_abi);
58 sc_config.validate_contract_variants();
59 sc_config
60}