actr-cli 0.1.15

Command line tool for Actor-RTC framework projects
Documentation
mod kotlin;
mod python;
mod swift;
mod traits;

pub use crate::commands::SupportedLanguage;
use crate::error::Result;
use kotlin::KotlinGenerator;
use python::PythonGenerator;
use swift::SwiftGenerator;
use tracing::info;
pub use traits::{GenContext, LanguageGenerator, ScaffoldType};

pub struct GeneratorFactory;

impl GeneratorFactory {
    pub fn get_generator(language: SupportedLanguage) -> Box<dyn LanguageGenerator> {
        match language {
            SupportedLanguage::Rust => unreachable!("Rust is handled directly in GenCommand"),
            SupportedLanguage::Python => Box::new(PythonGenerator),
            SupportedLanguage::Swift => Box::new(SwiftGenerator),
            SupportedLanguage::Kotlin => Box::new(KotlinGenerator),
        }
    }
}

pub async fn execute_codegen(language: SupportedLanguage, context: &GenContext) -> Result<()> {
    let generator = GeneratorFactory::get_generator(language);

    let mut all_files = generator.generate_infrastructure(context).await?;
    if !context.no_scaffold {
        all_files.extend(generator.generate_scaffold(context).await?);
    }
    if !context.no_format {
        generator.format_code(context, &all_files).await?;
    }

    generator.validate_code(context).await?;

    info!("✅ 代码生成完成!");
    generator.print_next_steps(context);
    Ok(())
}