use super::hub_dist_preset::{preset_meta_value, resolve_hub_dist_preset};
use super::AppService;
impl AppService {
#[allow(clippy::too_many_arguments)]
pub fn hub_dist(
&self,
source_dir: &str,
output_path: Option<&str>,
out_dir: Option<&str>,
preset: Option<&str>,
project_root: Option<&str>,
projections: Option<&[String]>,
config_path: Option<&str>,
lint_strict: Option<bool>,
) -> Result<String, String> {
let resolved_root = self
.resolve_root(project_root)
.map(|p| p.to_string_lossy().to_string());
let preset_resolution = resolve_hub_dist_preset(
preset,
resolved_root.as_deref(),
source_dir,
projections,
config_path,
lint_strict,
)
.map_err(|e| format!("dist: preset resolve failed: {e}"))?;
let eff_projections = preset_resolution.projections.as_deref();
let eff_config_path = preset_resolution.config_path.as_deref();
let eff_lint_strict = preset_resolution.lint_strict;
let reindex_json = self
.hub_reindex(output_path, Some(source_dir))
.map_err(|e| format!("dist: reindex failed: {e}"))?;
let gendoc_json = match self.hub_gendoc(
source_dir,
out_dir,
eff_projections,
eff_config_path,
eff_lint_strict,
) {
Ok(json) => json,
Err(e) => {
return Err(format!(
"dist: gendoc failed: {e}\nreindex result (succeeded): {reindex_json}"
));
}
};
let reindex_val: serde_json::Value = serde_json::from_str(&reindex_json)
.map_err(|e| format!("dist: reindex response parse: {e}"))?;
let gendoc_val: serde_json::Value = serde_json::from_str(&gendoc_json)
.map_err(|e| format!("dist: gendoc response parse: {e}"))?;
let mut composed = serde_json::json!({
"reindex": reindex_val,
"gendoc": gendoc_val,
"preset_catalog_version": preset_resolution.catalog_version,
});
if preset_resolution.preset_name.is_some() {
composed["preset"] = preset_meta_value(&preset_resolution);
}
Ok(composed.to_string())
}
}