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

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