unc_cli_rs/commands/
mod.rs

1#![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]
19/// What are you up to? (select one of the options with the up-down arrows on your keyboard and press Enter)
20pub enum TopLevelCommand {
21    #[strum_discriminants(strum(message = "account     - Manage accounts"))]
22    /// View account summary, create subaccount, delete account, list keys, add key, delete key, import account
23    Account(self::account::AccountCommands),
24    #[strum_discriminants(strum(
25        message = "tokens      - Manage token assets such as UNC, FT, NFT"
26    ))]
27    /// Use this for token actions: send or view balances of unc, FT, or NFT
28    Tokens(self::tokens::TokensCommands),
29    #[strum_discriminants(strum(
30        message = "pledging     - Manage pledging: view, add and withdraw pledge"
31    ))]
32    /// Use this for manage pledging: view, add and withdraw pledge
33    Pledging(self::pledging::Pledging),
34    #[strum_discriminants(strum(
35        message = "contract    - Manage smart-contracts: deploy code, call functions"
36    ))]
37    /// Use this for contract actions: call function, deploy, download wasm, inspect storage
38    Contract(self::contract::ContractCommands),
39    #[strum_discriminants(strum(message = "transaction - Operate transactions"))]
40    /// Use this to construct transactions or view a transaction status.
41    Transaction(self::transaction::TransactionCommands),
42    #[strum_discriminants(strum(
43        message = "config      - Manage connections in a configuration file (config.toml)"
44    ))]
45    /// Use this to manage connections in a configuration file (config.toml).
46    Config(self::config::ConfigCommands),
47    #[cfg(feature = "self-update")]
48    #[strum_discriminants(strum(message = "extension   - Manage unc CLI and extensions"))]
49    /// Use this to manage unc CLI and extensions
50    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}