vika_cli/generator/
module_selector.rs1use crate::error::{GenerationError, Result};
2use colored::*;
3use dialoguer::MultiSelect;
4
5pub fn select_modules(
6 available_modules: &[String],
7 ignored_modules: &[String],
8) -> Result<Vec<String>> {
9 let filtered_modules: Vec<String> = available_modules
10 .iter()
11 .filter(|m| !ignored_modules.contains(m))
12 .cloned()
13 .collect();
14
15 if filtered_modules.is_empty() {
16 return Err(GenerationError::NoModulesAvailable.into());
17 }
18
19 println!("{}", "Which modules do you want to generate?".bright_cyan());
20 println!();
21
22 let selections = MultiSelect::new()
23 .with_prompt("Select modules (use space to toggle, enter to confirm)")
24 .items(&filtered_modules)
25 .interact()
26 .map_err(|e| GenerationError::InvalidOperation {
27 message: format!("Failed to get user selection: {}", e),
28 })?;
29
30 if selections.is_empty() {
31 return Err(GenerationError::NoModulesSelected.into());
32 }
33
34 let selected: Vec<String> = selections
35 .iter()
36 .map(|&i| filtered_modules[i].clone())
37 .collect();
38
39 Ok(selected)
40}