unc_cli_rs/commands/contract/deploy/initialize_mode/
mod.rs

1use strum::{EnumDiscriminants, EnumIter, EnumMessage};
2
3mod call_function_type;
4
5#[derive(Debug, Clone, EnumDiscriminants, interactive_clap_derive::InteractiveClap)]
6#[interactive_clap(context = super::ContractFileContext)]
7#[strum_discriminants(derive(EnumMessage, EnumIter))]
8/// Select the need for initialization:
9pub enum InitializeMode {
10    /// Add an initialize
11    #[strum_discriminants(strum(message = "with-init-call     - Add an initialize"))]
12    WithInitCall(self::call_function_type::CallFunctionAction),
13    /// Don't add an initialize
14    #[strum_discriminants(strum(message = "without-init-call  - Don't add an initialize"))]
15    WithoutInitCall(NoInitialize),
16}
17
18#[derive(Debug, Clone, interactive_clap::InteractiveClap)]
19#[interactive_clap(input_context = super::ContractFileContext)]
20#[interactive_clap(output_context = NoInitializeContext)]
21pub struct NoInitialize {
22    #[interactive_clap(named_arg)]
23    /// Select network
24    network_config: crate::network_for_transaction::NetworkForTransactionArgs,
25}
26
27#[derive(Debug, Clone)]
28pub struct NoInitializeContext(super::ContractFileContext);
29
30impl NoInitializeContext {
31    pub fn from_previous_context(
32        previous_context: super::ContractFileContext,
33        _scope: &<NoInitialize as interactive_clap::ToInteractiveClapContextScope>::InteractiveClapContextScope,
34    ) -> color_eyre::eyre::Result<Self> {
35        Ok(Self(super::ContractFileContext {
36            global_context: previous_context.global_context,
37            receiver_account_id: previous_context.receiver_account_id,
38            signer_account_id: previous_context.signer_account_id,
39            code: previous_context.code,
40        }))
41    }
42}
43
44impl From<NoInitializeContext> for crate::commands::ActionContext {
45    fn from(item: NoInitializeContext) -> Self {
46        let on_after_getting_network_callback: crate::commands::OnAfterGettingNetworkCallback =
47            std::sync::Arc::new({
48                let signer_account_id = item.0.signer_account_id.clone();
49                let receiver_account_id = item.0.receiver_account_id.clone();
50
51                move |_network_config| {
52                    Ok(crate::commands::PrepopulatedTransaction {
53                        signer_id: signer_account_id.clone(),
54                        receiver_id: receiver_account_id.clone(),
55                        actions: vec![unc_primitives::transaction::Action::DeployContract(
56                            unc_primitives::transaction::DeployContractAction {
57                                code: item.0.code.clone(),
58                            },
59                        )],
60                    })
61                }
62            });
63
64        Self {
65            global_context: item.0.global_context,
66            interacting_with_account_ids: vec![
67                item.0.signer_account_id,
68                item.0.receiver_account_id,
69            ],
70            on_after_getting_network_callback,
71            on_before_signing_callback: std::sync::Arc::new(
72                |_prepolulated_unsinged_transaction, _network_config| Ok(()),
73            ),
74            on_before_sending_transaction_callback: std::sync::Arc::new(
75                |_signed_transaction, _network_config, _message| Ok(()),
76            ),
77            on_after_sending_transaction_callback: std::sync::Arc::new(
78                |_outcome_view, _network_config| Ok(()),
79            ),
80        }
81    }
82}