unc_cli_rs/commands/contract/deploy/initialize_mode/
mod.rs1use 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))]
8pub enum InitializeMode {
10 #[strum_discriminants(strum(message = "with-init-call - Add an initialize"))]
12 WithInitCall(self::call_function_type::CallFunctionAction),
13 #[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 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}