use std::path::{Path, PathBuf};
use clap::{Args, Subcommand};
use crate::cli::CanisterTarget;
#[derive(Debug, Subcommand)]
pub(crate) enum SchemaCommand {
Show(CanisterTarget),
DiagnosticArtifact(DiagnosticArtifactArgs),
#[command(subcommand)]
Migration(SchemaMigrationCommand),
}
#[derive(Args, Debug)]
pub(crate) struct DiagnosticArtifactArgs {
#[command(flatten)]
target: CanisterTarget,
#[arg(short, long, value_name = "PATH")]
output: PathBuf,
}
impl DiagnosticArtifactArgs {
pub(crate) const fn target(&self) -> &CanisterTarget {
&self.target
}
pub(crate) fn output(&self) -> &Path {
self.output.as_path()
}
}
#[derive(Debug, Subcommand)]
pub(crate) enum SchemaMigrationCommand {
Status(CanisterTarget),
Advance(CanisterTarget),
Run(CanisterTarget),
Abort(ConfirmedMigrationTarget),
Adopt(ConfirmedMigrationTarget),
}
#[derive(Args, Debug)]
pub(crate) struct ConfirmedMigrationTarget {
#[command(flatten)]
target: CanisterTarget,
#[arg(long)]
yes: bool,
}
impl ConfirmedMigrationTarget {
pub(crate) const fn target(&self) -> &CanisterTarget {
&self.target
}
pub(crate) const fn confirmed(&self) -> bool {
self.yes
}
}