actr_cli/commands/codegen/
traits.rs1use crate::commands::codegen::proto_model::ProtoModel;
2use crate::error::Result;
3use actr_config::ManifestConfig;
4use async_trait::async_trait;
5use std::path::PathBuf;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
9pub enum ScaffoldType {
10 Server,
12 Client,
14 #[default]
16 Both,
17}
18
19#[derive(Debug, Clone)]
21pub struct GenContext {
22 pub proto_files: Vec<PathBuf>,
23 pub proto_model: ProtoModel,
24 pub input_path: PathBuf,
25 pub output: PathBuf,
26 pub config_path: PathBuf,
27 pub config: ManifestConfig,
28 pub no_scaffold: bool,
29 pub overwrite_user_code: bool,
30 pub no_format: bool,
31 pub debug: bool,
32 pub skip_validation: bool,
33}
34
35#[async_trait]
37pub trait LanguageGenerator: Send + Sync {
38 async fn generate_infrastructure(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
40
41 async fn generate_scaffold(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
43
44 async fn format_code(&self, context: &GenContext, files: &[PathBuf]) -> Result<()>;
46
47 async fn validate_code(&self, context: &GenContext) -> Result<()>;
49
50 async fn finalize_generation(&self, _context: &GenContext) -> Result<()> {
52 Ok(())
53 }
54
55 fn print_next_steps(&self, context: &GenContext);
57}