actr_cli/commands/codegen/
mod.rs1mod 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}