soroban_cli/commands/contract/alias/
show.rs1use 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 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}