pub mod codegen;
pub mod config;
pub mod escape;
pub mod field_access;
pub mod fixture;
pub mod format;
pub mod validate;
use alef_core::backend::GeneratedFile;
use alef_core::config::AlefConfig;
use anyhow::{Context, Result};
use config::E2eConfig;
use fixture::{group_fixtures, load_fixtures};
use std::path::Path;
use tracing::info;
pub fn generate_e2e(
alef_config: &AlefConfig,
e2e_config: &E2eConfig,
languages: Option<&[String]>,
) -> Result<Vec<GeneratedFile>> {
let fixtures_dir = Path::new(&e2e_config.fixtures);
let fixtures = load_fixtures(fixtures_dir)
.with_context(|| format!("failed to load fixtures from {}", fixtures_dir.display()))?;
info!("Loaded {} fixture(s) from {}", fixtures.len(), e2e_config.fixtures);
let groups = group_fixtures(&fixtures);
let generators = if let Some(langs) = languages {
codegen::generators_for(langs)
} else if !e2e_config.languages.is_empty() {
codegen::generators_for(&e2e_config.languages)
} else {
codegen::all_generators()
};
let mut all_files = Vec::new();
for generator in &generators {
let files = generator.generate(&groups, e2e_config, alef_config)?;
info!(" [{}] generated {} file(s)", generator.language_name(), files.len());
all_files.extend(files);
}
Ok(all_files)
}