use camino::Utf8PathBuf;
use clap::{Args, Subcommand, ValueEnum};
use serde::Serialize;
pub use crate::self_depend::manager::Manager;
#[derive(Debug, Args)]
pub struct DependArgs {
#[command(subcommand)]
pub action: DependAction,
}
#[derive(Debug, Subcommand)]
pub enum DependAction {
Assess(AssessArgs),
Add(AddArgs),
}
#[derive(Debug, Args)]
pub struct AssessArgs {
#[arg(long)]
pub source: Utf8PathBuf,
#[arg(long, default_value = ".")]
pub target: Utf8PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(Debug, Args)]
pub struct AddArgs {
#[arg(long)]
pub source: Utf8PathBuf,
#[arg(long, default_value = ".")]
pub target: Utf8PathBuf,
#[arg(long, value_enum)]
pub kind: Kind,
#[arg(long, value_enum)]
pub manager: Option<Manager>,
#[arg(long, value_enum)]
pub channel: Option<Channel>,
#[arg(long)]
pub pin: Option<String>,
#[arg(long)]
pub apply: bool,
#[arg(long)]
pub json: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, ValueEnum)]
#[serde(rename_all = "kebab-case")]
#[value(rename_all = "kebab-case")]
pub enum Kind {
Dev,
Prod,
}
impl Kind {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Dev => "dev",
Self::Prod => "prod",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, ValueEnum)]
#[serde(rename_all = "kebab-case")]
#[value(rename_all = "kebab-case")]
pub enum Channel {
Crates,
Flake,
Pypi,
Npm,
GithubRelease,
}
impl Channel {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Crates => "crates",
Self::Flake => "flake",
Self::Pypi => "pypi",
Self::Npm => "npm",
Self::GithubRelease => "github-release",
}
}
pub const ALL: [Self; 5] = [
Self::Crates,
Self::Flake,
Self::Pypi,
Self::Npm,
Self::GithubRelease,
];
}