use std::path::PathBuf;
use clap::{Args, Subcommand};
#[derive(Args)]
pub struct GenerateArgs {
#[command(subcommand)]
command: GenerateCommand,
}
impl GenerateArgs {
pub fn run(self) -> anyhow::Result<()> {
cargo_gears_core::generate::GenerateParams::from(self).run()
}
}
impl From<GenerateArgs> for cargo_gears_core::generate::GenerateParams {
fn from(args: GenerateArgs) -> Self {
Self {
command: args.command.into(),
}
}
}
#[derive(Args)]
pub struct WorkspaceArgs {
path: PathBuf,
#[arg(short = 't', long, default_value = "default")]
template: String,
#[arg(short = 'p', long)]
project: Option<String>,
#[arg(short = 'v', long)]
verbose: bool,
#[arg(long, conflicts_with_all = ["git", "subfolder", "branch"])]
local_path: Option<String>,
#[arg(long)]
git: Option<String>,
#[arg(long)]
subfolder: Option<String>,
#[arg(long)]
branch: Option<String>,
#[arg(long)]
r#override: bool,
}
impl WorkspaceArgs {
pub fn run(self) -> anyhow::Result<()> {
cargo_gears_core::generate::workspace::WorkspaceParams::from(self).run()
}
}
impl From<WorkspaceArgs> for cargo_gears_core::generate::workspace::WorkspaceParams {
fn from(args: WorkspaceArgs) -> Self {
Self {
path: args.path,
template: args.template,
name: args.project,
verbose: args.verbose,
local_path: args.local_path,
git: args.git,
subfolder: args.subfolder,
branch: args.branch,
r#override: args.r#override,
}
}
}
#[derive(Args)]
pub struct ModuleArgs {
#[arg(short = 't', long)]
template: String,
#[arg(short = 'n', long)]
name: Option<String>,
#[arg(short = 'p', long, default_value = ".")]
path: PathBuf,
#[arg(short = 'v', long)]
verbose: bool,
#[arg(long, conflicts_with_all = ["git", "branch"])]
local_path: Option<String>,
#[arg(long)]
git: Option<String>,
#[arg(long)]
subfolder: Option<String>,
#[arg(long)]
branch: Option<String>,
}
impl ModuleArgs {
pub fn run(self) -> anyhow::Result<()> {
cargo_gears_core::generate::module::ModuleParams::from(self).run()
}
}
impl From<ModuleArgs> for cargo_gears_core::generate::module::ModuleParams {
fn from(args: ModuleArgs) -> Self {
Self {
template: args.template,
name: args.name,
path: args.path,
verbose: args.verbose,
local_path: args.local_path,
git: args.git,
subfolder: args.subfolder,
branch: args.branch,
}
}
}
#[derive(Args)]
pub struct GenerateConfigArgs {
#[arg(short = 't', long)]
template: String,
#[arg(long)]
app: Option<String>,
#[arg(long)]
env: Option<String>,
#[arg(long)]
name: Option<String>,
#[arg(short = 'p', long, default_value = ".")]
path: PathBuf,
}
impl GenerateConfigArgs {
pub fn run(self) -> anyhow::Result<()> {
cargo_gears_core::generate::config::GenerateConfigParams::from(self).run()
}
}
impl From<GenerateConfigArgs> for cargo_gears_core::generate::config::GenerateConfigParams {
fn from(args: GenerateConfigArgs) -> Self {
Self {
template: args.template,
app: args.app,
env: args.env,
name: args.name,
path: args.path,
}
}
}
#[derive(Subcommand)]
pub enum GenerateCommand {
Workspace(WorkspaceArgs),
Module(ModuleArgs),
Config(GenerateConfigArgs),
}
impl From<GenerateCommand> for cargo_gears_core::generate::GenerateCommand {
fn from(command: GenerateCommand) -> Self {
match command {
GenerateCommand::Workspace(args) => Self::Workspace(args.into()),
GenerateCommand::Module(args) => Self::Module(args.into()),
GenerateCommand::Config(args) => Self::Config(args.into()),
}
}
}