cellos_ctl/cmd/
config_cmd.rs1use crate::config::{self, Config};
4use crate::exit::{CtlError, CtlResult};
5
6pub fn set_server(url: &str) -> CtlResult<()> {
7 let parsed = url::Url::parse(url).map_err(|e| CtlError::usage(format!("invalid url: {e}")))?;
10 if !matches!(parsed.scheme(), "http" | "https") {
11 return Err(CtlError::usage(format!(
12 "url scheme must be http or https (got {})",
13 parsed.scheme()
14 )));
15 }
16 let mut cfg = config::load().unwrap_or_default();
17 cfg.server_url = Some(url.to_string());
18 config::save(&cfg)?;
19 println!("server set to {}", url);
20 Ok(())
21}
22
23pub fn set_token(token: &str) -> CtlResult<()> {
24 if token.trim().is_empty() {
25 return Err(CtlError::usage("token cannot be empty"));
26 }
27 let mut cfg = config::load().unwrap_or_default();
28 cfg.api_token = Some(token.to_string());
29 config::save(&cfg)?;
30 println!("token saved to {}", config::config_path()?.display());
31 Ok(())
32}
33
34pub fn show() -> CtlResult<()> {
35 let cfg: Config = config::load().unwrap_or_default();
36 println!("config_path: {}", config::config_path()?.display());
37 println!("server_url: {}", cfg.effective_server());
38 println!(
39 "api_token: {}",
40 match cfg.effective_token() {
41 Some(_) => "<set>",
42 None => "<unset>",
43 }
44 );
45 Ok(())
46}