Skip to main content

deslicer_cli/commands/change/
show.rs

1use clap::Args as ClapArgs;
2
3use crate::commands::pipeline::{authenticate, map_cli_error};
4use crate::output::emit_change_plan;
5use crate::Ctx;
6
7#[derive(ClapArgs)]
8pub struct Args {
9    #[arg(long)]
10    pub plan_id: Option<String>,
11
12    #[arg(long)]
13    pub environment: Option<String>,
14}
15
16pub async fn run(ctx: Ctx, args: Args) -> i32 {
17    let (_session, client) = match authenticate(&ctx, args.environment.as_deref(), None).await {
18        Ok(pair) => pair,
19        Err(err) => return map_cli_error(err),
20    };
21
22    if let Some(plan_id) = args.plan_id {
23        let plan = match client.get_plan(&plan_id).await {
24            Ok(plan) => plan,
25            Err(err) => return map_cli_error(err),
26        };
27        return emit_change_plan(&plan);
28    }
29
30    let plans = match client.list_plans(args.environment.as_deref()).await {
31        Ok(plans) => plans,
32        Err(err) => return map_cli_error(err),
33    };
34
35    match serde_json::to_string(&plans) {
36        Ok(json) => {
37            println!("{json}");
38            0
39        }
40        Err(err) => {
41            eprintln!("failed to serialize plans: {err}");
42            1
43        }
44    }
45}