From 477fbbcf36310ce830470a1f8c0d9647682cd58c Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Wed, 20 Mar 2024 12:48:58 +0100 Subject: [PATCH] custom proxy paths in sc config --- .../cmd/contract/generate_proxy/proxy_gen_main.rs | 14 ++++++++++++-- .../contract/sc_config/contract_variant_builder.rs | 2 ++ .../src/cmd/contract/sc_config/sc_config_model.rs | 1 + .../src/cmd/contract/sc_config/sc_config_serde.rs | 3 +++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/framework/meta/src/cmd/contract/generate_proxy/proxy_gen_main.rs b/framework/meta/src/cmd/contract/generate_proxy/proxy_gen_main.rs index 6344637323..36cc2a0eb7 100644 --- a/framework/meta/src/cmd/contract/generate_proxy/proxy_gen_main.rs +++ b/framework/meta/src/cmd/contract/generate_proxy/proxy_gen_main.rs @@ -15,11 +15,21 @@ const PROXIES_SOURCE_FILE_NAME: &str = "/output/proxy.rs"; impl MetaConfig { pub fn generate_proxy(&self) { - let file = create_file(PROXIES_SOURCE_FILE_NAME); - write_proxy_to_file(file, &self.original_contract_abi); + if self.sc_config.proxy_paths.is_empty() { + write_proxy_with_explicit_path(PROXIES_SOURCE_FILE_NAME, &self.original_contract_abi); + } else { + for path in &self.sc_config.proxy_paths { + write_proxy_with_explicit_path(path, &self.original_contract_abi); + } + } } } +fn write_proxy_with_explicit_path(path: &str, abi: &ContractAbi) { + let file = create_file(path); + write_proxy_to_file(file, abi); +} + fn write_proxy_to_file(mut file: File, abi: &ContractAbi) { write_header(&mut file); write_struct_template(&mut file, &abi.name); diff --git a/framework/meta/src/cmd/contract/sc_config/contract_variant_builder.rs b/framework/meta/src/cmd/contract/sc_config/contract_variant_builder.rs index 2d8b9dd54e..f0e4f3217c 100644 --- a/framework/meta/src/cmd/contract/sc_config/contract_variant_builder.rs +++ b/framework/meta/src/cmd/contract/sc_config/contract_variant_builder.rs @@ -276,6 +276,7 @@ impl ScConfig { ScConfig { default_contract_config_name: config.settings.main.clone().unwrap_or_default(), contracts, + proxy_paths: config.settings.proxy_paths.clone().unwrap_or_default(), } } @@ -295,6 +296,7 @@ impl ScConfig { wasm_crate_name, abi: original_abi.clone(), }], + proxy_paths: Vec::new(), } } diff --git a/framework/meta/src/cmd/contract/sc_config/sc_config_model.rs b/framework/meta/src/cmd/contract/sc_config/sc_config_model.rs index 7f9ddbf5a9..8c97bdc5be 100644 --- a/framework/meta/src/cmd/contract/sc_config/sc_config_model.rs +++ b/framework/meta/src/cmd/contract/sc_config/sc_config_model.rs @@ -15,6 +15,7 @@ pub const SC_CONFIG_FILE_NAMES: &[&str] = &["sc-config.toml", "multicontract.tom pub struct ScConfig { pub default_contract_config_name: String, pub contracts: Vec, + pub proxy_paths: Vec } impl ScConfig { diff --git a/framework/meta/src/cmd/contract/sc_config/sc_config_serde.rs b/framework/meta/src/cmd/contract/sc_config/sc_config_serde.rs index 4813fcfb09..50924ca26e 100644 --- a/framework/meta/src/cmd/contract/sc_config/sc_config_serde.rs +++ b/framework/meta/src/cmd/contract/sc_config/sc_config_serde.rs @@ -62,6 +62,9 @@ pub struct ContractVariantSerde { #[serde(deny_unknown_fields)] pub struct MultiContractGeneralSettingsSerde { pub main: Option, + + #[serde(rename = "proxy-paths")] + pub proxy_paths: Option> } #[derive(Deserialize, Default, Debug, Clone, PartialEq, Eq)]