1use {solana_pubkey::Pubkey, solana_signer::Signer};
2
3pub struct SenderStakeArgs {
4 pub stake_account_address: Pubkey,
5 pub stake_authority: Box<dyn Signer>,
6 pub withdraw_authority: Box<dyn Signer>,
7 pub lockup_authority: Option<Box<dyn Signer>>,
8 pub rent_exempt_reserve: Option<u64>,
9}
10
11pub struct StakeArgs {
12 pub unlocked_sol: u64,
13 pub lockup_authority: Option<Pubkey>,
14 pub sender_stake_args: Option<SenderStakeArgs>,
15}
16
17pub struct DistributeTokensArgs {
18 pub input_csv: String,
19 pub transaction_db: String,
20 pub output_path: Option<String>,
21 pub dry_run: bool,
22 pub sender_keypair: Box<dyn Signer>,
23 pub fee_payer: Box<dyn Signer>,
24 pub stake_args: Option<StakeArgs>,
25 pub spl_token_args: Option<SplTokenArgs>,
26 pub transfer_amount: Option<u64>,
27}
28
29#[derive(Default)]
30pub struct SplTokenArgs {
31 pub token_account_address: Pubkey,
32 pub mint: Pubkey,
33 pub decimals: u8,
34}
35
36pub struct BalancesArgs {
37 pub input_csv: String,
38 pub spl_token_args: Option<SplTokenArgs>,
39}
40
41pub struct TransactionLogArgs {
42 pub transaction_db: String,
43 pub output_path: String,
44}
45
46#[allow(clippy::large_enum_variant)]
47pub enum Command {
48 DistributeTokens(DistributeTokensArgs),
49 Balances(BalancesArgs),
50 TransactionLog(TransactionLogArgs),
51}
52
53pub struct Args {
54 pub config_file: String,
55 pub url: Option<String>,
56 pub command: Command,
57}