use clap::{Parser, ValueEnum};
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[command(version)]
pub struct CmdArgs {
#[arg(short, long, value_delimiter = ',')]
pub config: Option<Vec<PathBuf>>,
#[arg(short, long, num_args = 1..)]
pub input: Vec<PathBuf>,
#[arg(num_args = 1..)]
pub workspace: Vec<PathBuf>,
#[arg(long, value_delimiter = ',')]
pub ignore: Option<Vec<String>>,
#[arg(
long,
short = 'f',
default_value = "markdown",
value_enum,
ignore_case = true
)]
pub output_format: Format,
#[arg(long, value_enum, ignore_case = true)]
pub format: Option<Format>,
#[arg(long, short, default_value = "./output")]
pub output: OutputDestination,
#[arg(long)]
pub override_template: Option<PathBuf>,
#[arg(long, default_value = "Docs")]
pub site_name: Option<String>,
#[arg(long)]
pub mixin: Option<PathBuf>,
#[arg(long)]
pub verbose: bool,
}
#[derive(Debug, Clone, Eq, PartialEq, ValueEnum)]
pub enum Format {
Json,
Markdown,
}
#[allow(unused)]
#[derive(Debug, Clone)]
pub enum OutputDestination {
Stdout,
File(PathBuf),
}
impl std::str::FromStr for OutputDestination {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"stdout" => Ok(OutputDestination::Stdout),
_ => Ok(OutputDestination::File(PathBuf::from(s))),
}
}
}