Skip to main content

soroban_cli/commands/tx/op/add/
mod.rs

1use super::super::{global, help, xdr::tx_envelope_from_input};
2use crate::utils::XDR_DEPTH_LIMIT;
3use crate::xdr::{OperationBody, WriteXdr};
4
5pub(crate) use super::super::new;
6
7mod account_merge;
8mod args;
9mod begin_sponsoring_future_reserves;
10mod bump_sequence;
11mod change_trust;
12mod claim_claimable_balance;
13mod clawback;
14mod clawback_claimable_balance;
15mod create_account;
16mod create_claimable_balance;
17mod create_passive_sell_offer;
18mod end_sponsoring_future_reserves;
19mod liquidity_pool_deposit;
20mod liquidity_pool_withdraw;
21mod manage_buy_offer;
22mod manage_data;
23mod manage_sell_offer;
24mod path_payment_strict_receive;
25mod path_payment_strict_send;
26mod payment;
27mod revoke_sponsorship;
28mod set_options;
29mod set_trustline_flags;
30
31#[derive(Debug, clap::Parser)]
32#[allow(clippy::doc_markdown)]
33pub enum Cmd {
34    #[command(about = help::ACCOUNT_MERGE)]
35    AccountMerge(account_merge::Cmd),
36    #[command(about = help::BEGIN_SPONSORING_FUTURE_RESERVES)]
37    BeginSponsoringFutureReserves(begin_sponsoring_future_reserves::Cmd),
38    #[command(about = help::BUMP_SEQUENCE)]
39    BumpSequence(bump_sequence::Cmd),
40    #[command(about = help::CHANGE_TRUST)]
41    ChangeTrust(change_trust::Cmd),
42    #[command(about = help::CLAIM_CLAIMABLE_BALANCE)]
43    ClaimClaimableBalance(claim_claimable_balance::Cmd),
44    #[command(about = help::CLAWBACK)]
45    Clawback(clawback::Cmd),
46    #[command(about = help::CLAWBACK_CLAIMABLE_BALANCE)]
47    ClawbackClaimableBalance(clawback_claimable_balance::Cmd),
48    #[command(about = help::CREATE_ACCOUNT)]
49    CreateAccount(create_account::Cmd),
50    #[command(about = help::CREATE_CLAIMABLE_BALANCE)]
51    CreateClaimableBalance(create_claimable_balance::Cmd),
52    #[command(about = help::CREATE_PASSIVE_SELL_OFFER)]
53    CreatePassiveSellOffer(create_passive_sell_offer::Cmd),
54    #[command(about = help::END_SPONSORING_FUTURE_RESERVES)]
55    EndSponsoringFutureReserves(end_sponsoring_future_reserves::Cmd),
56    #[command(about = help::LIQUIDITY_POOL_DEPOSIT)]
57    LiquidityPoolDeposit(liquidity_pool_deposit::Cmd),
58    #[command(about = help::LIQUIDITY_POOL_WITHDRAW)]
59    LiquidityPoolWithdraw(liquidity_pool_withdraw::Cmd),
60    #[command(about = help::MANAGE_BUY_OFFER)]
61    ManageBuyOffer(manage_buy_offer::Cmd),
62    #[command(about = help::MANAGE_DATA)]
63    ManageData(manage_data::Cmd),
64    #[command(about = help::MANAGE_SELL_OFFER)]
65    ManageSellOffer(manage_sell_offer::Cmd),
66    #[command(about = help::PATH_PAYMENT_STRICT_RECEIVE)]
67    PathPaymentStrictReceive(path_payment_strict_receive::Cmd),
68    #[command(about = help::PATH_PAYMENT_STRICT_SEND)]
69    PathPaymentStrictSend(path_payment_strict_send::Cmd),
70    #[command(about = help::PAYMENT)]
71    Payment(payment::Cmd),
72    #[command(about = help::REVOKE_SPONSORSHIP)]
73    RevokeSponsorship(revoke_sponsorship::Cmd),
74    #[command(about = help::SET_OPTIONS)]
75    SetOptions(set_options::Cmd),
76    #[command(about = help::SET_TRUSTLINE_FLAGS)]
77    SetTrustlineFlags(set_trustline_flags::Cmd),
78}
79
80#[derive(thiserror::Error, Debug)]
81pub enum Error {
82    #[error(transparent)]
83    TxXdr(#[from] super::super::xdr::Error),
84    #[error(transparent)]
85    Xdr(#[from] crate::xdr::Error),
86    #[error(transparent)]
87    New(#[from] super::super::new::Error),
88    #[error(transparent)]
89    Tx(#[from] super::super::args::Error),
90}
91
92impl TryFrom<&Cmd> for OperationBody {
93    type Error = super::super::new::Error;
94    fn try_from(cmd: &Cmd) -> Result<Self, Self::Error> {
95        Ok(match &cmd {
96            Cmd::AccountMerge(account_merge::Cmd { op, .. }) => op.try_into()?,
97            Cmd::BeginSponsoringFutureReserves(begin_sponsoring_future_reserves::Cmd {
98                op,
99                ..
100            }) => op.try_into()?,
101            Cmd::BumpSequence(bump_sequence::Cmd { op, .. }) => op.into(),
102            Cmd::ChangeTrust(change_trust::Cmd { op, .. }) => op.try_into()?,
103            Cmd::ClaimClaimableBalance(claim_claimable_balance::Cmd { op, .. }) => op.try_into()?,
104            Cmd::Clawback(clawback::Cmd { op, .. }) => op.try_into()?,
105            Cmd::ClawbackClaimableBalance(clawback_claimable_balance::Cmd { op, .. }) => {
106                op.try_into()?
107            }
108            Cmd::CreateAccount(create_account::Cmd { op, .. }) => op.try_into()?,
109            Cmd::CreateClaimableBalance(create_claimable_balance::Cmd { op, .. }) => {
110                op.try_into()?
111            }
112            Cmd::CreatePassiveSellOffer(create_passive_sell_offer::Cmd { op, .. }) => {
113                op.try_into()?
114            }
115            Cmd::EndSponsoringFutureReserves(end_sponsoring_future_reserves::Cmd {
116                op, ..
117            }) => op.into(),
118            Cmd::LiquidityPoolDeposit(liquidity_pool_deposit::Cmd { op, .. }) => op.try_into()?,
119            Cmd::LiquidityPoolWithdraw(liquidity_pool_withdraw::Cmd { op, .. }) => op.try_into()?,
120            Cmd::ManageBuyOffer(manage_buy_offer::Cmd { op, .. }) => op.try_into()?,
121            Cmd::ManageData(manage_data::Cmd { op, .. }) => op.into(),
122            Cmd::ManageSellOffer(manage_sell_offer::Cmd { op, .. }) => op.try_into()?,
123            Cmd::PathPaymentStrictReceive(path_payment_strict_receive::Cmd { op, .. }) => {
124                op.try_into()?
125            }
126            Cmd::PathPaymentStrictSend(path_payment_strict_send::Cmd { op, .. }) => {
127                op.try_into()?
128            }
129            Cmd::Payment(payment::Cmd { op, .. }) => op.try_into()?,
130            Cmd::RevokeSponsorship(revoke_sponsorship::Cmd { op, .. }) => op.try_into()?,
131            Cmd::SetOptions(set_options::Cmd { op, .. }) => op.try_into()?,
132            Cmd::SetTrustlineFlags(set_trustline_flags::Cmd { op, .. }) => op.try_into()?,
133        })
134    }
135}
136
137impl Cmd {
138    #[allow(clippy::too_many_lines)]
139    pub fn run(&self, _: &global::Args) -> Result<(), Error> {
140        let op = OperationBody::try_from(self)?;
141        let res = match self {
142            Cmd::AccountMerge(cmd) => cmd.op.tx.add_op(
143                op,
144                tx_envelope_from_input(&cmd.args.tx_xdr)?,
145                cmd.args.source(),
146            ),
147            Cmd::BeginSponsoringFutureReserves(cmd) => cmd.op.tx.add_op(
148                op,
149                tx_envelope_from_input(&cmd.args.tx_xdr)?,
150                cmd.args.source(),
151            ),
152            Cmd::BumpSequence(cmd) => cmd.op.tx.add_op(
153                op,
154                tx_envelope_from_input(&cmd.args.tx_xdr)?,
155                cmd.args.source(),
156            ),
157            Cmd::ChangeTrust(cmd) => cmd.op.tx.add_op(
158                op,
159                tx_envelope_from_input(&cmd.args.tx_xdr)?,
160                cmd.args.source(),
161            ),
162            Cmd::ClaimClaimableBalance(cmd) => cmd.op.tx.add_op(
163                op,
164                tx_envelope_from_input(&cmd.args.tx_xdr)?,
165                cmd.args.source(),
166            ),
167            Cmd::Clawback(cmd) => cmd.op.tx.add_op(
168                op,
169                tx_envelope_from_input(&cmd.args.tx_xdr)?,
170                cmd.args.source(),
171            ),
172            Cmd::ClawbackClaimableBalance(cmd) => cmd.op.tx.add_op(
173                op,
174                tx_envelope_from_input(&cmd.args.tx_xdr)?,
175                cmd.args.source(),
176            ),
177            Cmd::CreateAccount(cmd) => cmd.op.tx.add_op(
178                op,
179                tx_envelope_from_input(&cmd.args.tx_xdr)?,
180                cmd.args.source(),
181            ),
182            Cmd::CreateClaimableBalance(cmd) => cmd.op.tx.add_op(
183                op,
184                tx_envelope_from_input(&cmd.args.tx_xdr)?,
185                cmd.args.source(),
186            ),
187            Cmd::CreatePassiveSellOffer(cmd) => cmd.op.tx.add_op(
188                op,
189                tx_envelope_from_input(&cmd.args.tx_xdr)?,
190                cmd.args.source(),
191            ),
192            Cmd::EndSponsoringFutureReserves(cmd) => cmd.op.tx.add_op(
193                op,
194                tx_envelope_from_input(&cmd.args.tx_xdr)?,
195                cmd.args.source(),
196            ),
197            Cmd::LiquidityPoolDeposit(cmd) => cmd.op.tx.add_op(
198                op,
199                tx_envelope_from_input(&cmd.args.tx_xdr)?,
200                cmd.args.source(),
201            ),
202            Cmd::LiquidityPoolWithdraw(cmd) => cmd.op.tx.add_op(
203                op,
204                tx_envelope_from_input(&cmd.args.tx_xdr)?,
205                cmd.args.source(),
206            ),
207            Cmd::ManageBuyOffer(cmd) => cmd.op.tx.add_op(
208                op,
209                tx_envelope_from_input(&cmd.args.tx_xdr)?,
210                cmd.args.source(),
211            ),
212            Cmd::ManageData(cmd) => cmd.op.tx.add_op(
213                op,
214                tx_envelope_from_input(&cmd.args.tx_xdr)?,
215                cmd.args.source(),
216            ),
217            Cmd::ManageSellOffer(cmd) => cmd.op.tx.add_op(
218                op,
219                tx_envelope_from_input(&cmd.args.tx_xdr)?,
220                cmd.args.source(),
221            ),
222            Cmd::PathPaymentStrictReceive(cmd) => cmd.op.tx.add_op(
223                op,
224                tx_envelope_from_input(&cmd.args.tx_xdr)?,
225                cmd.args.source(),
226            ),
227            Cmd::PathPaymentStrictSend(cmd) => cmd.op.tx.add_op(
228                op,
229                tx_envelope_from_input(&cmd.args.tx_xdr)?,
230                cmd.args.source(),
231            ),
232            Cmd::Payment(cmd) => cmd.op.tx.add_op(
233                op,
234                tx_envelope_from_input(&cmd.args.tx_xdr)?,
235                cmd.args.source(),
236            ),
237            Cmd::RevokeSponsorship(cmd) => cmd.op.tx.add_op(
238                op,
239                tx_envelope_from_input(&cmd.args.tx_xdr)?,
240                cmd.args.source(),
241            ),
242            Cmd::SetOptions(cmd) => cmd.op.tx.add_op(
243                op,
244                tx_envelope_from_input(&cmd.args.tx_xdr)?,
245                cmd.args.source(),
246            ),
247            Cmd::SetTrustlineFlags(cmd) => cmd.op.tx.add_op(
248                op,
249                tx_envelope_from_input(&cmd.args.tx_xdr)?,
250                cmd.args.source(),
251            ),
252        }?;
253        println!(
254            "{}",
255            res.to_xdr_base64(crate::xdr::Limits::depth(XDR_DEPTH_LIMIT))?
256        );
257        Ok(())
258    }
259}