1pub 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
22pub trait E2eCodegen: Send + Sync {
24 fn generate(
26 &self,
27 groups: &[FixtureGroup],
28 e2e_config: &E2eConfig,
29 alef_config: &AlefConfig,
30 ) -> Result<Vec<GeneratedFile>>;
31
32 fn language_name(&self) -> &'static str;
34}
35
36pub 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
54pub 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}