Skip to main content

alef_e2e/codegen/
mod.rs

1//! E2e test code generation trait and language dispatch.
2
3pub mod c;
4pub mod csharp;
5pub mod elixir;
6pub mod go;
7pub mod java;
8pub mod php;
9pub mod python;
10pub mod r;
11pub mod ruby;
12pub mod rust;
13pub mod typescript;
14pub mod wasm;
15
16use crate::config::E2eConfig;
17use crate::fixture::FixtureGroup;
18use alef_core::backend::GeneratedFile;
19use alef_core::config::AlefConfig;
20use anyhow::Result;
21
22/// Trait for per-language e2e test code generation.
23pub trait E2eCodegen: Send + Sync {
24    /// Generate all e2e test project files for this language.
25    fn generate(
26        &self,
27        groups: &[FixtureGroup],
28        e2e_config: &E2eConfig,
29        alef_config: &AlefConfig,
30    ) -> Result<Vec<GeneratedFile>>;
31
32    /// Language name for display and directory naming.
33    fn language_name(&self) -> &'static str;
34}
35
36/// Get all available e2e code generators.
37pub fn all_generators() -> Vec<Box<dyn E2eCodegen>> {
38    vec![
39        Box::new(rust::RustE2eCodegen),
40        Box::new(python::PythonE2eCodegen),
41        Box::new(typescript::TypeScriptCodegen),
42        Box::new(go::GoCodegen),
43        Box::new(java::JavaCodegen),
44        Box::new(csharp::CSharpCodegen),
45        Box::new(php::PhpCodegen),
46        Box::new(ruby::RubyCodegen),
47        Box::new(elixir::ElixirCodegen),
48        Box::new(r::RCodegen),
49        Box::new(wasm::WasmCodegen),
50        Box::new(c::CCodegen),
51    ]
52}
53
54/// Get e2e code generators for specific language names.
55pub fn generators_for(languages: &[String]) -> Vec<Box<dyn E2eCodegen>> {
56    all_generators()
57        .into_iter()
58        .filter(|g| languages.iter().any(|l| l == g.language_name()))
59        .collect()
60}