soroban_cli/commands/contract/alias/
show.rs

1use std::fmt::Debug;
2
3use crate::commands::{config::network, global};
4use crate::config::locator;
5use crate::print::Print;
6use clap::Parser;
7
8#[derive(Parser, Debug, Clone)]
9#[group(skip)]
10pub struct Cmd {
11    #[command(flatten)]
12    pub config_locator: locator::Args,
13
14    #[command(flatten)]
15    network: network::Args,
16
17    /// The contract alias that will be displayed.
18    pub alias: String,
19}
20
21#[derive(thiserror::Error, Debug)]
22pub enum Error {
23    #[error(transparent)]
24    Locator(#[from] locator::Error),
25
26    #[error(transparent)]
27    Network(#[from] network::Error),
28
29    #[error("no contract found with alias '{alias}' for network '{network_passphrase}'")]
30    NoContract {
31        alias: String,
32        network_passphrase: String,
33    },
34}
35
36impl Cmd {
37    pub fn run(&self, global_args: &global::Args) -> Result<(), Error> {
38        let print = Print::new(global_args.quiet);
39        let alias = &self.alias;
40        let network = self.network.get(&self.config_locator)?;
41        let network_passphrase = &network.network_passphrase;
42
43        if let Some(contract) = self
44            .config_locator
45            .get_contract_id(&self.alias, network_passphrase)?
46        {
47            print.infoln(format!(
48                "Contract alias '{alias}' references {contract} on network '{network_passphrase}'"
49            ));
50
51            println!("{contract}");
52
53            Ok(())
54        } else {
55            Err(Error::NoContract {
56                alias: alias.into(),
57                network_passphrase: network_passphrase.into(),
58            })
59        }
60    }
61}