use crate::core::config::ResolvedCrateConfig;
use anyhow::Context as _;
use super::{extract, readme};
pub(super) fn regenerate_test_apps_after_sync(
config: &ResolvedCrateConfig,
_e2e_config: &crate::core::config::e2e::E2eConfig,
config_path: &std::path::Path,
) -> anyhow::Result<usize> {
use crate::core::config::NewAlefConfig;
use crate::core::config::e2e::DependencyMode;
let raw = std::fs::read_to_string(config_path)
.with_context(|| format!("failed to read {} for test_apps regen", config_path.display()))?;
let new_alef_cfg: NewAlefConfig = toml::from_str(&raw)
.with_context(|| format!("failed to parse {} for test_apps regen", config_path.display()))?;
let mut resolved_crates = new_alef_cfg
.resolve()
.with_context(|| format!("failed to resolve {} for test_apps regen", config_path.display()))?;
let fresh_config = resolved_crates
.iter()
.position(|c| c.name == config.name && c.e2e.is_some())
.or_else(|| resolved_crates.iter().position(|c| c.e2e.is_some()))
.map(|idx| resolved_crates.swap_remove(idx))
.ok_or_else(|| anyhow::anyhow!("no crate with [e2e] block found in reloaded config"))?;
let e2e_config = fresh_config
.e2e
.as_ref()
.ok_or_else(|| anyhow::anyhow!("reloaded crate has no [e2e] block"))?;
let mut registry_config = e2e_config.clone();
registry_config.dep_mode = DependencyMode::Registry;
let e2e_ref = ®istry_config;
let api = extract(&fresh_config, config_path, false)?;
let files = crate::e2e::generate_e2e(&fresh_config, e2e_ref, None, &api.types, &api.enums)?;
if files.is_empty() {
return Ok(0);
}
let base_dir = std::path::PathBuf::from(".");
let count = super::generate::write_scaffold_files_with_overwrite(&files, &base_dir, true)?;
let sources_hash = super::super::cache::sources_hash(&fresh_config.sources)?;
let alef_toml_bytes = super::super::cache::read_alef_toml_bytes(config_path);
let path_set: std::collections::HashSet<std::path::PathBuf> =
files.iter().map(|f| base_dir.join(&f.path)).collect();
super::generate::finalize_hashes(&path_set, &sources_hash, &alef_toml_bytes)?;
Ok(count)
}
pub(super) fn regenerate_scaffold_after_sync(
config: &ResolvedCrateConfig,
config_path: &std::path::Path,
) -> anyhow::Result<usize> {
use crate::core::config::NewAlefConfig;
let raw = std::fs::read_to_string(config_path)
.with_context(|| format!("failed to read {} for scaffold regen", config_path.display()))?;
let new_alef_cfg: NewAlefConfig = toml::from_str(&raw)
.with_context(|| format!("failed to parse {} for scaffold regen", config_path.display()))?;
let mut resolved_crates = new_alef_cfg
.resolve()
.with_context(|| format!("failed to resolve {} for scaffold regen", config_path.display()))?;
let fresh_config = resolved_crates
.iter()
.position(|c| c.name == config.name)
.or(Some(0))
.and_then(|idx| {
if idx < resolved_crates.len() {
Some(resolved_crates.swap_remove(idx))
} else {
None
}
})
.ok_or_else(|| anyhow::anyhow!("no crate found in reloaded config for scaffold regen"))?;
let api = extract(&fresh_config, config_path, false)?;
let languages = fresh_config.languages.clone();
let scaffold_files = super::scaffold(&api, &fresh_config, &languages)?;
if scaffold_files.is_empty() {
return Ok(0);
}
let base_dir = std::path::PathBuf::from(".");
let count = super::generate::write_scaffold_files_with_overwrite(&scaffold_files, &base_dir, true)?;
let sources_hash = super::super::cache::sources_hash(&fresh_config.sources)?;
let alef_toml_bytes = super::super::cache::read_alef_toml_bytes(config_path);
let path_set: std::collections::HashSet<std::path::PathBuf> =
scaffold_files.iter().map(|f| base_dir.join(&f.path)).collect();
super::generate::finalize_hashes(&path_set, &sources_hash, &alef_toml_bytes)?;
Ok(count)
}
pub(super) fn regenerate_readmes(config: &ResolvedCrateConfig, config_path: &std::path::Path) -> anyhow::Result<usize> {
let api = extract(config, config_path, false)?;
let languages = crate::readme::expand_configured_readme_languages(config, &config.languages);
let readme_files = readme(&api, config, &languages)?;
let base_dir = std::path::PathBuf::from(".");
let sources_hash = super::super::cache::sources_hash(&config.sources)?;
let alef_toml_bytes = super::super::cache::read_alef_toml_bytes(config_path);
let count = super::generate::write_scaffold_files_with_overwrite(&readme_files, &base_dir, true)?;
let paths: std::collections::HashSet<std::path::PathBuf> =
readme_files.iter().map(|f| base_dir.join(&f.path)).collect();
super::generate::finalize_hashes(&paths, &sources_hash, &alef_toml_bytes)?;
Ok(count)
}