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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
use common::command::{CliCommand, CliConfig, ProcessResult};
use common::math::price::{process_sqrt_price_to_tick, process_tick_to_sqrt_price};
use solana_client::rpc_client::RpcClient;
use crate::command::fee_tier::fee_tier::process_fee_tier_info;
use crate::command::pair::accept_protocol_fee_authority::process_accept_protocol_fee_authority;
use crate::command::pair::collect_partner_fee::process_collect_partner_fee;
use crate::command::pair::collect_protocol_fee::process_collect_protocol_fee;
use crate::command::pair::config::process_config_info;
use crate::command::pair::create_config::{process_init_config, process_init_config_template};
use crate::command::pair::create_fee_tier::{process_create_fee_tier, process_create_fee_tier_template};
use crate::command::pair::create_partner::{process_create_partner, process_create_partner_template};
use crate::command::pair::create_pool::{process_create_pool, process_create_pool_template};
use crate::command::pair::create_tick_array::{process_create_tick_array, process_create_tick_array_template};
use crate::command::pair::initialize_rewarder::process_initialize_rewarder;
use crate::command::pair::pair::process_pair_info;
use crate::command::pair::pair_list::process_pair_list;
use crate::command::pair::partner::process_partner_info;
use crate::command::pair::swap::process_swap;
use crate::command::pair::transfer_protocol_fee_authority::process_transfer_protocol_fee_authority;
use crate::command::pair::update_config_protocol_fee_rate::process_update_config_protocol_fee_rate;
use crate::command::pair::update_fee_rate::process_update_fee_rate;
use crate::command::pair::update_partner::process_update_partner;
use crate::command::pair::update_protocol_fee_rate::process_update_protocol_fee_rate;
use crate::command::pair::update_rewarder_emission::process_update_rewarder_emission;
use crate::command::position::collect_fee::process_collect_fee;
use crate::command::position::collect_rewarder::process_collect_rewarder;
use crate::command::position::decrease_liquidity::process_decrease_liquidity;
use crate::command::position::increase_liquidity::process_increase_liquidity;
use crate::command::position::increase_liquidity_with_fixed_token::process_increase_liquidity_with_fixed_token;
use crate::command::position::open_position::process_open_position;
use crate::command::position::position_list::process_position_list;
use crate::command::position::process_position_info;
use crate::command::position::remove_position::process_remove_position;
use crate::command::ticks::array_index::process_array_index_info;
use crate::command::ticks::price::process_tick_price_info;
use crate::command::ticks::tick::process_tick_info;
use crate::command::ticks::tick_array::process_tick_array_info;
use crate::command::ticks::tick_map::process_tick_map_info;

pub fn process_command(config: &mut CliConfig, rpc_client: RpcClient) -> ProcessResult {
    match config.command {
        CliCommand::PairAcceptProtocolFeeAuthority { clmm_config } => {
            process_accept_protocol_fee_authority(&rpc_client, config, &clmm_config)
        }
        CliCommand::PairCollectFee { mint } => process_collect_fee(&rpc_client, config, &mint),
        CliCommand::PairCollectPartnerFee { partner, clmmpool } => {
            process_collect_partner_fee(&rpc_client, config, &partner, &clmmpool)
        }
        CliCommand::PairCollectProtocolFee { clmmpool } => {
            process_collect_protocol_fee(&rpc_client, config, &clmmpool)
        }
        CliCommand::PairCreatePoolTemplate { output_file } => {
            process_create_pool_template(output_file)
        }
        CliCommand::PairCreatePool { entry_file } => {
            process_create_pool(&rpc_client, config, entry_file)
        }
        CliCommand::PairPartnerCreateTemplate { output_file } => {
            process_create_partner_template(output_file)
        }
        CliCommand::PairPartnerCreate { entry_file } => {
            process_create_partner(&rpc_client, config, entry_file)
        }
        CliCommand::PairPartnerInfo { partner } => process_partner_info(&rpc_client, partner),
        CliCommand::PairTickArrayCreateTemplate { output_file } => {
            process_create_tick_array_template(output_file)
        }
        CliCommand::PairTickArrayCreate { entry_file } => {
            process_create_tick_array(&rpc_client, config, entry_file)
        }
        CliCommand::PairInfo { pair_key } => process_pair_info(&rpc_client, &pair_key),
        CliCommand::PairList {} => process_pair_list(&rpc_client),
        CliCommand::PairConfigInitTemplate { output_file } => {
            process_init_config_template(output_file)
        }
        CliCommand::PairConfigInit { entry_file } => {
            process_init_config(&rpc_client, config, entry_file)
        }
        CliCommand::PairConfigInfo { config_key } => process_config_info(&rpc_client, config_key),
        CliCommand::PairFeeTierCreateTemplate { output_file } => {
            process_create_fee_tier_template(output_file)
        }
        CliCommand::PairFeeTierCreate { entry_file } => {
            process_create_fee_tier(&rpc_client, config, entry_file)
        }
        CliCommand::PairFeeTierInfo { fee_tier } => process_fee_tier_info(&rpc_client, fee_tier),
        CliCommand::PairConfigProtocolFeeRateUpdate {
            clmm_config,
            new_protocol_fee_rate,
        } => process_update_config_protocol_fee_rate(
            &rpc_client,
            config,
            &clmm_config,
            &new_protocol_fee_rate,
        ),
        CliCommand::PairFeeRateUpdate { fee_tier, clmmpool } => {
            process_update_fee_rate(&rpc_client, config, &fee_tier, &clmmpool)
        }
        CliCommand::PairPartnerUpdate {
            partner,
            new_fee_rate,
            new_claim_authority,
        } => process_update_partner(
            &rpc_client,
            &config,
            &partner,
            &new_fee_rate,
            &new_claim_authority,
        ),
        CliCommand::PairProtocolFeeRateUpdate { clmmpool } => {
            process_update_protocol_fee_rate(&rpc_client, config, &clmmpool)
        }
        CliCommand::PairSwap {
            clmmpool,
            a_to_b,
            by_amount_in,
            price_limit_tick,
            amount,
            slid,
        } => process_swap(
            &rpc_client,
            config,
            &clmmpool,
            by_amount_in,
            price_limit_tick,
            a_to_b,
            &amount,
            &slid,
        ),
        CliCommand::PairInitializeRewarder {
            clmmpool,
            rewarder_authority_file,
            rewarder_token_mint,
            rewarder_index,
            mint_wrapper,
            minter
        } => process_initialize_rewarder(
            &rpc_client,
            config,
            clmmpool,
            rewarder_authority_file,
            rewarder_token_mint,
            rewarder_index,
            mint_wrapper,
            minter
        ),
        CliCommand::PairUpdateRewarderEmission {
            clmmpool,
            rewarder_authority_file,
            rewarder_index,
            emissions_per_day
        } => process_update_rewarder_emission(
            &rpc_client,
            config,
            clmmpool,
            rewarder_authority_file,
            rewarder_index,
            emissions_per_day
        ),
        CliCommand::PairCollectRewarder {
            mint,
            rewarder_index
        } => process_collect_rewarder(
            &rpc_client,
            config,
            mint,
            rewarder_index
        ),

        CliCommand::PositionIncrease {
            mint,
            amount_a,
            amount_b,
            slid,
        } => process_increase_liquidity(&rpc_client, config, &mint, &amount_a, &amount_b, &slid),
        CliCommand::PositionIncreaseWithFixedToken {
            mint,
            amount,
            slid,
            is_a_fixed,
        } => process_increase_liquidity_with_fixed_token(
            &rpc_client,
            config,
            &mint,
            amount,
            &slid,
            is_a_fixed,
        ),
        CliCommand::PositionDecrease {
            mint,
            amount_a,
            amount_b,
            liquidity,
            slid,
        } => process_decrease_liquidity(&rpc_client, config, &mint, &amount_a, &liquidity, &amount_b, &slid),
        CliCommand::PositionOpen {
            clmmpool,
            tick_lower_index,
            tick_upper_index,
        } => process_open_position(
            &rpc_client,
            config,
            &clmmpool,
            &tick_lower_index,
            &tick_upper_index,
        ),
        CliCommand::PositionRemove { mint } => process_remove_position(&rpc_client, config, &mint),
        CliCommand::PositionInfo { mint } => process_position_info(&rpc_client, &mint),
        CliCommand::PositionCollectFee { mint } => process_collect_fee(&rpc_client, config, &mint),
        CliCommand::PositionList { clmmpool, auth } => {
            process_position_list(&rpc_client, clmmpool, auth)
        }
        CliCommand::PairTransferProtocolFeeAuthority {
            clmm_config,
            new_authority,
        } => process_transfer_protocol_fee_authority(
            &rpc_client,
            config,
            &clmm_config,
            &new_authority,
        ),
        CliCommand::MathTickToSqrtPrice { tick } => process_tick_to_sqrt_price(tick),
        CliCommand::MathSqrtPriceToTick { price } => process_sqrt_price_to_tick(price),
        CliCommand::TickArrayIndex {
            pool,
            tick_index,
            array_index,
        } => process_tick_array_info(&rpc_client, tick_index, array_index, &pool),
        CliCommand::TickInfo { pool, tick_index } => {
            process_tick_info(&rpc_client, tick_index, &pool)
        }
        CliCommand::TickMapInfo { pool, array_index } => {
            process_tick_map_info(&rpc_client, array_index, &pool)
        }
        CliCommand::TickPrice { tick } => process_tick_price_info(&rpc_client, tick),
        CliCommand::ArrayIndex { tick, tick_spacing } => process_array_index_info(tick, tick_spacing),
        _ => unreachable!(),
    }
}