1pub mod codegen;
8pub mod config;
9pub mod escape;
10pub mod field_access;
11pub mod fixture;
12pub mod format;
13pub mod validate;
14
15use alef_core::backend::GeneratedFile;
16use alef_core::config::AlefConfig;
17use anyhow::{Context, Result};
18use config::E2eConfig;
19use fixture::{group_fixtures, load_fixtures};
20use std::path::Path;
21use tracing::info;
22
23pub fn generate_e2e(
28 alef_config: &AlefConfig,
29 e2e_config: &E2eConfig,
30 languages: Option<&[String]>,
31) -> Result<Vec<GeneratedFile>> {
32 let fixtures_dir = Path::new(&e2e_config.fixtures);
33 let fixtures = load_fixtures(fixtures_dir)
34 .with_context(|| format!("failed to load fixtures from {}", fixtures_dir.display()))?;
35
36 info!("Loaded {} fixture(s) from {}", fixtures.len(), e2e_config.fixtures);
37
38 let groups = group_fixtures(&fixtures);
39
40 let generators = if let Some(langs) = languages {
41 codegen::generators_for(langs)
42 } else if !e2e_config.languages.is_empty() {
43 codegen::generators_for(&e2e_config.languages)
44 } else {
45 codegen::all_generators()
46 };
47
48 let mut all_files = Vec::new();
49 for generator in &generators {
50 let files = generator.generate(&groups, e2e_config, alef_config)?;
51 info!(" [{}] generated {} file(s)", generator.language_name(), files.len());
52 all_files.extend(files);
53 }
54
55 Ok(all_files)
56}