1use crate::client::accounting::AccountingClient;
2use crate::config::Config;
3use crate::error::YukiError;
4use crate::output::{OutputFormat, format_json, format_table, is_tty};
5
6pub async fn list(config: &Config, format: Option<&str>) -> Result<(), YukiError> {
7 let mut client = AccountingClient::new();
8 client.authenticate(&config.api_key).await?;
9 let admins = client.administrations().await?;
10
11 let headers = vec!["Name".into(), "Admin ID".into(), "Domain ID".into()];
12 let rows: Vec<Vec<String>> = admins
13 .iter()
14 .map(|a| vec![a.name.clone(), a.id.clone(), a.domain_id.clone()])
15 .collect();
16
17 let fmt = OutputFormat::from_flag(format, is_tty());
18 match fmt {
19 OutputFormat::Table => println!("{}", format_table(&headers, &rows)),
20 OutputFormat::Json => println!("{}", format_json(&headers, &rows)),
21 }
22 Ok(())
23}
24
25pub fn switch(config: &mut Config, name: &str) -> Result<(), YukiError> {
26 if !config.administrations.contains_key(name) {
27 return Err(YukiError::Config(format!(
28 "unknown administration: {name}. Run 'yuki admin list' to see available administrations."
29 )));
30 }
31 config.default_admin = name.to_string();
32 config.save_to(&Config::default_path())?;
33 eprintln!("Switched default administration to: {name}");
34 Ok(())
35}