actr_cli/commands/initialize/
mod.rs

1mod kotlin;
2mod python;
3mod swift;
4pub mod traits;
5
6use crate::commands::SupportedLanguage;
7use crate::error::{ActrCliError, Result};
8use kotlin::KotlinInitializer;
9use python::PythonInitializer;
10use swift::SwiftInitializer;
11
12pub use traits::{InitContext, ProjectInitializer};
13
14pub struct InitializerFactory;
15
16impl InitializerFactory {
17    pub fn get_initializer(language: SupportedLanguage) -> Result<Box<dyn ProjectInitializer>> {
18        match language {
19            SupportedLanguage::Rust => Err(ActrCliError::Unsupported(
20                "Rust initialization is handled by InitCommand".to_string(),
21            )),
22            SupportedLanguage::Python => Ok(Box::new(PythonInitializer)),
23            SupportedLanguage::Swift => Ok(Box::new(SwiftInitializer)),
24            SupportedLanguage::Kotlin => Ok(Box::new(KotlinInitializer)),
25        }
26    }
27}
28
29pub fn execute_initialize(language: SupportedLanguage, context: &InitContext) -> Result<()> {
30    let initializer = InitializerFactory::get_initializer(language)?;
31    initializer.generate_project_structure(context)?;
32    initializer.print_next_steps(context);
33    Ok(())
34}