Skip to main content

soroban_cli/commands/tx/new/
change_trust.rs

1use clap::Parser;
2
3use crate::{commands::tx, tx::builder, xdr};
4
5#[derive(Parser, Debug, Clone)]
6#[group(skip)]
7pub struct Cmd {
8    #[command(flatten)]
9    pub tx: tx::Args,
10    #[clap(flatten)]
11    pub op: Args,
12}
13
14#[derive(Debug, clap::Args, Clone)]
15pub struct Args {
16    #[arg(long)]
17    pub line: builder::Asset,
18    /// Limit for the trust line, 0 to remove the trust line
19    #[arg(long, default_value = i64::MAX.to_string())]
20    pub limit: i64,
21}
22
23impl TryFrom<&Cmd> for xdr::OperationBody {
24    type Error = tx::args::Error;
25    fn try_from(cmd: &Cmd) -> Result<Self, Self::Error> {
26        let asset = cmd.tx.resolve_asset(&cmd.op.line)?;
27        let line = match asset {
28            xdr::Asset::CreditAlphanum4(asset) => xdr::ChangeTrustAsset::CreditAlphanum4(asset),
29            xdr::Asset::CreditAlphanum12(asset) => xdr::ChangeTrustAsset::CreditAlphanum12(asset),
30            xdr::Asset::Native => xdr::ChangeTrustAsset::Native,
31        };
32        Ok(xdr::OperationBody::ChangeTrust(xdr::ChangeTrustOp {
33            line,
34            limit: cmd.op.limit,
35        }))
36    }
37}