| 92 | "clippy" => clippy_command(&args, &cwd), |
| 93 | _ => { |
| 94 | print_usage(); |
| 95 | Err(format!("unknown command `{command}`")) |
| 96 | } |
| 97 | } |
| 98 | }; |
| 99 | |
| 100 | if let Err(err) = result { |
| 101 | eprintln!("{err}"); |
| 102 | std::process::exit(1); |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | #[derive(Clone, Copy)] |
| 107 | enum FlagArity { |
| 108 | Switch, |
| 109 | Value, |
| 110 | OptionalValue, |
| 111 | } |
| 112 | |
| 113 | #[derive(Clone, Copy)] |
| 114 | struct FlagSpec { |
| 115 | name: &'static str, |
| 116 | arity: FlagArity, |
| 117 | } |
| 118 | |
| 119 | const fn switch(name: &'static str) -> FlagSpec { |
| 120 | FlagSpec { |
| 121 | name, |
| 122 | arity: FlagArity::Switch, |
| 123 | } |
| 124 | } |
| 125 | |
| 126 | const fn value(name: &'static str) -> FlagSpec { |
| 127 | FlagSpec { |
| 128 | name, |
| 129 | arity: FlagArity::Value, |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | const fn optional_value(name: &'static str) -> FlagSpec { |
| 134 | FlagSpec { |
| 135 | name, |
| 136 | arity: FlagArity::OptionalValue, |
| 137 | } |
| 138 | } |
| 139 | |
| 140 | const PATH: &[FlagSpec] = &[value("--path")]; |
| 141 | const NEW: &[FlagSpec] = &[value("--path"), value("--name")]; |
| 142 | const NEW_DLC: &[FlagSpec] = &[value("--path"), value("--name"), switch("--no-open")]; |
| 143 | const NEW_SCRIPT: &[FlagSpec] = &[ |
| 144 | value("--path"), |
| 145 | value("--name"), |
| 146 | value("--res"), |
| 147 | value("--dlc"), |
| 148 | switch("--no-open"), |
| 149 | ]; |
| 150 | const NEW_SCENE: &[FlagSpec] = &[ |
| 151 | value("--path"), |