pub mod dto;
pub mod list;
pub mod resolve;
pub mod show;
use clap::{Subcommand, ValueEnum};
use crate::error::CliError;
use crate::output::OutputSpec;
#[derive(Debug, Clone, Copy, ValueEnum, PartialEq, Eq)]
#[clap(rename_all = "kebab-case")]
pub enum StatusArg {
Open,
Resolved,
}
#[derive(Subcommand, Debug)]
pub enum DiscussionAction {
List {
run_id: String,
#[arg(long, value_enum)]
status: Option<StatusArg>,
},
Show {
run_id: String,
discussion_id: String,
},
Resolve {
run_id: String,
discussion_id: String,
#[arg(long)]
choice: String,
#[arg(long)]
note: Option<String>,
#[arg(long)]
idempotency_key: Option<String>,
#[arg(long)]
dry_run: bool,
},
}
pub fn dispatch(
action: DiscussionAction,
spec: &OutputSpec,
warnings: &[String],
) -> Result<(), CliError> {
match action {
DiscussionAction::List { run_id, status } => list::run(list::Args {
run_id,
status,
spec,
warnings,
}),
DiscussionAction::Show {
run_id,
discussion_id,
} => show::run(&run_id, &discussion_id, spec, warnings),
DiscussionAction::Resolve {
run_id,
discussion_id,
choice,
note,
idempotency_key,
dry_run,
} => resolve::run(resolve::Args {
run_id,
discussion_id,
choice,
note,
idempotency_key,
dry_run,
spec,
warnings,
}),
}
}
pub fn status_kebab(s: octl_core::DiscussionStatus) -> &'static str {
use octl_core::DiscussionStatus::{Open, Resolved};
match s {
Open => "open",
Resolved => "resolved",
}
}