use std::str::FromStr;
use clap::{ArgAction, Parser};
use crate::options;
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum SortBy {
Name,
Visibility,
Kind,
}
impl FromStr for SortBy {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"name" => Ok(Self::Name),
"visibility" => Ok(Self::Visibility),
"kind" => Ok(Self::Kind),
_ => Err("Unrecognized sort order"),
}
}
}
impl ToString for SortBy {
fn to_string(&self) -> String {
match self {
Self::Name => "name",
Self::Visibility => "visibility",
Self::Kind => "kind",
}
.to_owned()
}
}
#[derive(Parser, Clone, PartialEq, Eq, Debug)]
#[group(id = "GenerateTreeOptions")]
pub struct Options {
#[command(flatten)]
pub general: options::general::Options,
#[command(flatten)]
pub project: options::project::Options,
#[command(flatten)]
pub selection: options::selection::Options,
#[arg(long = "sort-by", default_value = "name")]
pub sort_by: SortBy,
#[arg(long = "sort-reversed")]
pub sort_reversed: bool,
#[arg(long = "orphans")]
pub orphans: bool,
#[arg(long = "no-orphans", action = ArgAction::SetFalse, overrides_with = "orphans")]
pub no_orphans: (),
}