deslicer_cli/commands/change/
show.rs1use 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}