use std::path::PathBuf;
use clap::Parser;
use npmgen_core::{DEFAULT_DRIVER, DEFAULT_MANIFEST_PATH, DEFAULT_OUT, Generator};
#[derive(Debug, Parser)]
#[command(name = "npmgen", version, about, long_about = None)]
pub struct Cli {
#[arg(long, env = "NPMGEN_MANIFEST_PATH", default_value = DEFAULT_MANIFEST_PATH)]
manifest_path: PathBuf,
#[arg(long, env = "NPMGEN_OUT", default_value = DEFAULT_OUT)]
out: PathBuf,
#[arg(short = 'p', long, env = "NPMGEN_PACKAGE")]
package: Option<String>,
#[arg(long, env = "NPMGEN_BIN")]
bin: Option<String>,
#[arg(long = "pkg-version", env = "NPMGEN_PKG_VERSION")]
pkg_version: Option<String>,
#[arg(long, env = "NPMGEN_TAG")]
tag: Option<String>,
#[arg(long, env = "NPMGEN_NO_BUILD")]
no_build: bool,
#[arg(long, env = "NPMGEN_BUILDER", default_value = DEFAULT_DRIVER)]
builder: String,
#[arg(long = "target", env = "NPMGEN_TARGETS", value_delimiter = ',')]
targets: Vec<String>,
}
impl Cli {
pub fn into_generator(self) -> Generator {
let mut builder = Generator::builder()
.manifest_path(self.manifest_path)
.out(self.out)
.no_build(self.no_build)
.driver(self.builder)
.targets(self.targets);
if let Some(package) = self.package {
builder = builder.package(package);
}
if let Some(bin) = self.bin {
builder = builder.bin(bin);
}
if let Some(version) = self.pkg_version {
builder = builder.version(version);
}
if let Some(tag) = self.tag {
builder = builder.tag(tag);
}
builder.build()
}
}