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