unc_cli_rs/commands/
mod.rs1#![allow(clippy::enum_variant_names, clippy::large_enum_variant)]
2use strum::{EnumDiscriminants, EnumIter, EnumMessage};
3
4pub mod account;
5mod config;
6pub mod contract;
7mod pledging;
8mod tokens;
9pub mod transaction;
10
11#[cfg(feature = "self-update")]
12pub mod extensions;
13
14#[derive(Debug, EnumDiscriminants, Clone, interactive_clap::InteractiveClap)]
15#[interactive_clap(context = crate::GlobalContext)]
16#[strum_discriminants(derive(EnumMessage, EnumIter))]
17#[interactive_clap(disable_back)]
18#[non_exhaustive]
19pub enum TopLevelCommand {
21 #[strum_discriminants(strum(message = "account - Manage accounts"))]
22 Account(self::account::AccountCommands),
24 #[strum_discriminants(strum(
25 message = "tokens - Manage token assets such as UNC, FT, NFT"
26 ))]
27 Tokens(self::tokens::TokensCommands),
29 #[strum_discriminants(strum(
30 message = "pledging - Manage pledging: view, add and withdraw pledge"
31 ))]
32 Pledging(self::pledging::Pledging),
34 #[strum_discriminants(strum(
35 message = "contract - Manage smart-contracts: deploy code, call functions"
36 ))]
37 Contract(self::contract::ContractCommands),
39 #[strum_discriminants(strum(message = "transaction - Operate transactions"))]
40 Transaction(self::transaction::TransactionCommands),
42 #[strum_discriminants(strum(
43 message = "config - Manage connections in a configuration file (config.toml)"
44 ))]
45 Config(self::config::ConfigCommands),
47 #[cfg(feature = "self-update")]
48 #[strum_discriminants(strum(message = "extension - Manage unc CLI and extensions"))]
49 Extensions(self::extensions::ExtensionsCommands),
51}
52
53pub type OnBeforeSigningCallback = std::sync::Arc<
54 dyn Fn(
55 &mut unc_primitives::transaction::Transaction,
56 &crate::config::NetworkConfig,
57 ) -> crate::CliResult,
58>;
59
60pub type OnAfterGettingNetworkCallback = std::sync::Arc<
61 dyn Fn(&crate::config::NetworkConfig) -> color_eyre::eyre::Result<PrepopulatedTransaction>,
62>;
63
64#[derive(Debug, Clone)]
65pub struct PrepopulatedTransaction {
66 pub signer_id: unc_primitives::types::AccountId,
67 pub receiver_id: unc_primitives::types::AccountId,
68 pub actions: Vec<unc_primitives::transaction::Action>,
69}
70
71impl From<unc_primitives::transaction::Transaction> for PrepopulatedTransaction {
72 fn from(value: unc_primitives::transaction::Transaction) -> Self {
73 Self {
74 signer_id: value.signer_id,
75 receiver_id: value.receiver_id,
76 actions: value.actions,
77 }
78 }
79}
80
81#[derive(Clone)]
82pub struct ActionContext {
83 pub global_context: crate::GlobalContext,
84 pub interacting_with_account_ids: Vec<unc_primitives::types::AccountId>,
85 pub on_after_getting_network_callback: OnAfterGettingNetworkCallback,
86 pub on_before_signing_callback: OnBeforeSigningCallback,
87 pub on_before_sending_transaction_callback:
88 crate::transaction_signature_options::OnBeforeSendingTransactionCallback,
89 pub on_after_sending_transaction_callback:
90 crate::transaction_signature_options::OnAfterSendingTransactionCallback,
91}
92
93#[derive(Clone)]
94pub struct TransactionContext {
95 pub global_context: crate::GlobalContext,
96 pub network_config: crate::config::NetworkConfig,
97 pub prepopulated_transaction: PrepopulatedTransaction,
98 pub on_before_signing_callback: OnBeforeSigningCallback,
99 pub on_before_sending_transaction_callback:
100 crate::transaction_signature_options::OnBeforeSendingTransactionCallback,
101 pub on_after_sending_transaction_callback:
102 crate::transaction_signature_options::OnAfterSendingTransactionCallback,
103}