soroban_cli/commands/env/
mod.rsuse crate::{
    commands::global,
    config::locator::{self},
    print::Print,
};
use clap::Parser;
#[derive(Debug, Parser)]
pub struct Cmd {
    #[command(flatten)]
    pub config_locator: locator::Args,
}
#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error(transparent)]
    Locator(#[from] locator::Error),
}
impl Cmd {
    pub fn run(&self, global_args: &global::Args) -> Result<(), Error> {
        let print = Print::new(global_args.quiet);
        let mut lines: Vec<(String, String)> = Vec::new();
        if let Some(data) = get("STELLAR_NETWORK") {
            lines.push(data);
        }
        if let Some(data) = get("STELLAR_ACCOUNT") {
            lines.push(data);
        }
        if lines.is_empty() {
            print.warnln("No defaults or environment variables set".to_string());
            return Ok(());
        }
        let max_len = lines.iter().map(|l| l.0.len()).max().unwrap_or(0);
        lines.sort();
        for (value, source) in lines {
            println!("{value:max_len$} # {source}");
        }
        Ok(())
    }
}
fn get(env_var: &str) -> Option<(String, String)> {
    let source = std::env::var(format!("{env_var}_SOURCE"))
        .ok()
        .unwrap_or("env".to_string());
    if let Ok(value) = std::env::var(env_var) {
        return Some((format!("{env_var}={value}"), source));
    }
    None
}