cargo_modules/command/structure/
options.rs1use std::{fmt::Display, str::FromStr};
6
7use clap::Parser;
8
9use crate::options::{GeneralOptions, ProjectOptions};
10
11#[derive(Copy, Clone, PartialEq, Eq, Debug)]
12pub enum SortBy {
13 Name,
14 Visibility,
15 Kind,
16}
17
18impl FromStr for SortBy {
19 type Err = &'static str;
20
21 fn from_str(s: &str) -> Result<Self, Self::Err> {
22 match s {
23 "name" => Ok(Self::Name),
24 "visibility" => Ok(Self::Visibility),
25 "kind" => Ok(Self::Kind),
26 _ => Err("Unrecognized sort order"),
27 }
28 }
29}
30
31impl Display for SortBy {
32 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33 f.write_str(match self {
34 Self::Name => "name",
35 Self::Visibility => "visibility",
36 Self::Kind => "kind",
37 })
38 }
39}
40
41#[derive(Parser, Clone, PartialEq, Eq, Debug)]
42#[group(id = "GenerateTreeOptions")]
43pub struct Options {
44 #[command(flatten)]
45 pub general: GeneralOptions,
46
47 #[command(flatten)]
48 pub project: ProjectOptions,
49
50 #[command(flatten)]
51 pub selection: SelectionOptions,
52
53 #[arg(long = "sort-by", default_value = "name")]
56 pub sort_by: SortBy,
57
58 #[arg(long = "sort-reversed")]
60 pub sort_reversed: bool,
61
62 #[arg(long = "focus-on")]
65 pub focus_on: Option<String>,
66
67 #[arg(long = "max-depth")]
70 pub max_depth: Option<usize>,
71
72 #[arg(long = "cfg-test")]
74 pub cfg_test: bool,
75}
76
77#[derive(Parser, Clone, PartialEq, Eq, Debug)]
84#[group(id = "SelectionOptions")]
85pub struct SelectionOptions {
86 #[arg(long = "no-fns")]
88 pub no_fns: bool,
89
90 #[arg(long = "no-traits")]
92 pub no_traits: bool,
93
94 #[arg(long = "no-types")]
96 pub no_types: bool,
97}