envx_cli/
wizard.rs

1use color_eyre::Result;
2use color_eyre::eyre::eyre;
3use envx_core::wizard::SetupWizard;
4use envx_core::{ProjectTemplate, get_builtin_templates};
5
6/// Runs the project setup wizard or applies a specific template.
7///
8/// # Errors
9///
10/// Returns an error if:
11/// - The specified template is not found
12/// - The template setup fails
13/// - The interactive wizard encounters an error
14pub fn run_wizard(template: Option<String>) -> Result<()> {
15    if let Some(template_name) = template {
16        // Use template directly
17        run_template_setup(&template_name)?;
18        Ok(())
19    } else {
20        // Run interactive wizard
21        let mut wizard = SetupWizard::new();
22        wizard.run()?;
23        Ok(())
24    }
25}
26
27fn run_template_setup(template_name: &str) -> Result<()> {
28    let templates = get_builtin_templates();
29
30    let template = templates
31        .iter()
32        .find(|t| t.name.to_lowercase() == template_name.to_lowercase())
33        .ok_or_else(|| eyre!("Template '{}' not found", template_name))?;
34
35    println!("šŸš€ Setting up {} project...", template.name);
36    println!("{}\n", template.description);
37
38    // Apply the template
39    apply_template(template)?;
40
41    println!("\nāœ… Project setup complete!");
42    Ok(())
43}
44
45fn apply_template(template: &ProjectTemplate) -> Result<()> {
46    let _ = template;
47    // Implementation would create the project structure based on template
48    unimplemented!()
49}
50
51/// Lists all available project templates.
52///
53/// # Errors
54///
55/// This function currently does not return errors, but the `Result` type
56/// is used for consistency with the error handling pattern.
57pub fn list_templates() -> Result<()> {
58    let templates = get_builtin_templates();
59
60    println!("Available project templates:\n");
61
62    for template in templates {
63        println!("  {} - {}", template.name, template.description);
64    }
65
66    println!("\nUse: envx init --template <name>");
67    Ok(())
68}