use anyhow::{Context, Result};
use std::io::{BufWriter, Write};
use std::path::Path;
use tracing::{info, info_span};
#[tracing::instrument(level = "info", fields(output_path=%output_path.display()), err)]
pub fn create_output_writer(output_path: &Path) -> Result<BufWriter<std::fs::File>> {
let span = info_span!("writer.create");
let _guard = span.enter();
info!("creating output file writer");
let output_file = std::fs::File::create(output_path)
.with_context(|| format!("Failed to create output file '{}'", output_path.display()))?;
let writer = BufWriter::new(output_file);
info!("output writer created successfully");
Ok(writer)
}
#[tracing::instrument(level = "info", skip(writer), err)]
pub fn finalize_output<W: Write>(mut writer: W) -> Result<()> {
let span = info_span!("writer.finalize");
let _guard = span.enter();
info!("finalizing output");
writer.flush().context("Failed to flush output buffer")?;
info!("output finalized successfully");
Ok(())
}