Files
ARCADIA-Studio/harness/experiments/traceability-view-17f1f89-20260923/native/supplement-source-bundle-v2/bundle_converter.rs
T

38 lines
2.2 KiB
Rust

//! Supplemental read-only bundle converter. Not part of the frozen product build.
use oa_core::{language, persistence, source_files, source_project, validate_candidate};
use std::{fs::OpenOptions, io::Write, path::Path};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let args: Vec<_> = std::env::args_os().skip(1).collect();
if args.len() != 2 { return Err("Expected snapshot bundle entry and NEW self-contained source path".into()); }
let limits = source_project::ProjectLimits::default();
let disk = source_files::load_project(Path::new(&args[0]), limits)?;
if disk.diagnostics.iter().any(|d| d.diagnostic.severity == oa_core::validation::Severity::Error) { return Err(format!("Disk diagnostics: {:?}", disk.diagnostics).into()); }
println!("Loader/lint warnings: {:?}", disk.diagnostics);
let bundle = disk.reachable_bundle();
if bundle.files != disk.bundle.files { return Err("Unreachable source buffers".into()); }
for (name, text) in &bundle.files {
match disk.expectations.get(name) {
Some(source_files::DiskExpectation::Bytes(bytes)) if bytes.as_slice() == text.as_bytes() => {},
_ => return Err(format!("Loader changed or omitted raw bytes: {name}").into()),
}
}
let compiled = source_project::compile_bundle(&bundle, limits)
.map_err(|e| format!("Compile diagnostics: {e:?}"))?;
if compiled.bundle != bundle || compiled.decoded.migration.is_some() {
return Err("Unexpected identity stabilization or migration".into());
}
let project = &compiled.decoded.project;
validate_candidate(project)?;
let source = language::format(project);
let decoded = persistence::decode_with_report(source.as_bytes())?;
if decoded.migration.is_some() || &decoded.project != project {
return Err("Self-contained source roundtrip changed complete Project".into());
}
let mut output = OpenOptions::new().write(true).create_new(true).open(&args[1])?;
output.write_all(source.as_bytes())?;
output.sync_all()?;
println!("Bundle files: {}; complete Project roundtrip exact", bundle.files.len());
println!("Engineering warnings (not loader errors): {:?}", compiled.diagnostics);
Ok(())
}