actr_cli/commands/codegen/
traits.rs

1use crate::error::Result;
2use actr_config::Config;
3use async_trait::async_trait;
4use std::path::PathBuf;
5
6/// Type of scaffold code to generate
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
8pub enum ScaffoldType {
9    /// Generate server-side scaffold only
10    Server,
11    /// Generate client-side scaffold only
12    Client,
13    /// Generate both server and client scaffolds
14    #[default]
15    Both,
16}
17
18/// Context for code generation
19#[derive(Debug, Clone)]
20pub struct GenContext {
21    pub proto_files: Vec<PathBuf>,
22    pub input_path: PathBuf,
23    pub output: PathBuf,
24    pub config: Config,
25    pub no_scaffold: bool,
26    pub overwrite_user_code: bool,
27    pub no_format: bool,
28    pub debug: bool,
29}
30
31/// Interface for language-specific code generators
32#[async_trait]
33pub trait LanguageGenerator: Send {
34    /// Generate infrastructure code (e.g., protobuf types, actors)
35    async fn generate_infrastructure(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
36
37    /// Generate user code scaffold
38    async fn generate_scaffold(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
39
40    /// Format generated code using language-specific tools
41    async fn format_code(&self, context: &GenContext, files: &[PathBuf]) -> Result<()>;
42
43    /// Validate generated code (e.g., using a compiler)
44    async fn validate_code(&self, context: &GenContext) -> Result<()>;
45
46    /// Print next steps
47    fn print_next_steps(&self, context: &GenContext);
48}