use std::fs;
use std::io::{BufWriter, Write};
use std::path::Path;
use anyhow::Result;
use super::format::{FileEntry, IndexManifest, ReferenceEntry, SymbolEntry, TextEntry};
pub fn write_index(
output_dir: &Path,
manifest: &IndexManifest,
files: &[FileEntry],
symbols: &[SymbolEntry],
texts: &[TextEntry],
references: &[ReferenceEntry],
) -> Result<()> {
fs::create_dir_all(output_dir)?;
let index_path = output_dir.join("index.json");
let json = serde_json::to_string_pretty(manifest)?;
fs::write(&index_path, json.as_bytes())?;
write_jsonl(&output_dir.join("files.jsonl"), files)?;
write_jsonl(&output_dir.join("symbols.jsonl"), symbols)?;
write_jsonl(&output_dir.join("texts.jsonl"), texts)?;
write_jsonl(&output_dir.join("references.jsonl"), references)?;
Ok(())
}
fn write_jsonl<T: serde::Serialize>(path: &Path, items: &[T]) -> Result<()> {
let file = fs::File::create(path)?;
let mut writer = BufWriter::new(file);
for item in items {
serde_json::to_writer(&mut writer, item)?;
writer.write_all(b"\n")?;
}
writer.flush()?;
Ok(())
}