1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use common::command::{CliConfig, ProcessResult};
use common::init::{Matche};

use solana_client::rpc_client::RpcClient;
use crate::command::quarry::info::process_farming_quarry_mine_info;
use crate::command::quarry::list::process_farming_quarry_mine_list;
use crate::command::quarry::new::process_farming_quarry_mine_new;
use crate::command::quarry::set_famine::process_farming_quarry_set_famine;
use crate::command::quarry::update_share::process_farming_quarry_update_share;
use crate::command::rewarder::info::process_farming_mine_rewarder_info;
use crate::command::rewarder::list::process_farming_mine_rewarder_list;
use crate::command::rewarder::new::process_farming_mine_rewarder_new;
use crate::command::rewarder::set_annual_rate::process_farming_mine_rewarder_set_annual_rate;
use crate::command::rewarder::sync_quarry_rewards::process_farming_mine_rewarder_sync_quarry_rewards;
use crate::app::{Cli, MineCli, QuarryCommands, RewarderCommands};


pub fn process_command(config: &mut CliConfig, rpc_client: RpcClient, app: Box<dyn Matche>) -> ProcessResult {
    let app = app.as_any().downcast_ref::<Cli>().unwrap();
    match &app.command {
        MineCli::Quarry { command } => {
            match command {
                QuarryCommands::New {
                    rewarder,
                    mint,
                    famine_ts,
                    share,
                } => process_farming_quarry_mine_new(&rpc_client, config, *rewarder, *mint, *famine_ts, *share),
                QuarryCommands::List => {
                    process_farming_quarry_mine_list(&rpc_client, config)
                }
                QuarryCommands::Info { rewarder, mint } => {
                    process_farming_quarry_mine_info(&rpc_client, config, *rewarder, *mint)
                }
                QuarryCommands::UpdateShare {
                    rewarder,
                    mint,
                    share,
                } => process_farming_quarry_update_share(&rpc_client, config, *rewarder, *mint, *share),
                QuarryCommands::SetFamine { rewarder, mint, ts } => {
                    process_farming_quarry_set_famine(&rpc_client, config, *rewarder, *mint, *ts)
                }
            }
        },
        MineCli::Rewarder { command } => {
            match command {
                RewarderCommands::New {
                    wrapper,
                    annual_rate,
                } => process_farming_mine_rewarder_new(&rpc_client, config, *wrapper, *annual_rate),
                RewarderCommands::List {} => {
                    process_farming_mine_rewarder_list(&rpc_client, config)
                }
                RewarderCommands::Info { rewarder } => {
                    process_farming_mine_rewarder_info(&rpc_client, config, *rewarder)
                }
                RewarderCommands::SetAnnualRate { rewarder, rate } => {
                    process_farming_mine_rewarder_set_annual_rate(&rpc_client, config, *rewarder, *rate)
                }
                RewarderCommands::SyncQuarryRewards { rewarder, mint } => {
                    process_farming_mine_rewarder_sync_quarry_rewards(&rpc_client, config, *rewarder, mint)
                }
            }
        },
    }
}