use crate::error::Result;
use actr_config::Config;
use async_trait::async_trait;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ScaffoldType {
Server,
Client,
#[default]
Both,
}
#[derive(Debug, Clone)]
pub struct GenContext {
pub proto_files: Vec<PathBuf>,
pub input_path: PathBuf,
pub output: PathBuf,
pub config_path: PathBuf,
pub config: Config,
pub no_scaffold: bool,
pub overwrite_user_code: bool,
pub no_format: bool,
pub debug: bool,
}
#[async_trait]
pub trait LanguageGenerator: Send {
async fn generate_infrastructure(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
async fn generate_scaffold(&self, context: &GenContext) -> Result<Vec<PathBuf>>;
async fn format_code(&self, context: &GenContext, files: &[PathBuf]) -> Result<()>;
async fn validate_code(&self, context: &GenContext) -> Result<()>;
fn print_next_steps(&self, context: &GenContext);
}