actr_cli/commands/codegen/
mod.rs

1mod kotlin;
2mod python;
3mod swift;
4mod traits;
5
6pub use crate::commands::SupportedLanguage;
7use crate::error::Result;
8use kotlin::KotlinGenerator;
9use python::PythonGenerator;
10use swift::SwiftGenerator;
11use tracing::info;
12pub use traits::{GenContext, LanguageGenerator, ScaffoldType};
13
14pub struct GeneratorFactory;
15
16impl GeneratorFactory {
17    pub fn get_generator(language: SupportedLanguage) -> Box<dyn LanguageGenerator> {
18        match language {
19            SupportedLanguage::Rust => unreachable!("Rust is handled directly in GenCommand"),
20            SupportedLanguage::Python => Box::new(PythonGenerator),
21            SupportedLanguage::Swift => Box::new(SwiftGenerator),
22            SupportedLanguage::Kotlin => Box::new(KotlinGenerator),
23        }
24    }
25}
26
27pub async fn execute_codegen(language: SupportedLanguage, context: &GenContext) -> Result<()> {
28    let generator = GeneratorFactory::get_generator(language);
29
30    let mut all_files = generator.generate_infrastructure(context).await?;
31    if !context.no_scaffold {
32        all_files.extend(generator.generate_scaffold(context).await?);
33    }
34    if !context.no_format {
35        generator.format_code(context, &all_files).await?;
36    }
37
38    generator.validate_code(context).await?;
39
40    info!("✅ 代码生成完成!");
41    generator.print_next_steps(context);
42    Ok(())
43}