repo-flatten 0.2.0

A utility to flatten all files in the repository into a single file, consumed by LLMs. Will ignore .gitignore and hidden files.
//! Output file writing module.

use anyhow::{Context, Result};
use std::io::{BufWriter, Write};
use std::path::Path;
use tracing::{info, info_span};

/// Create a buffered writer for the output file.
#[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)
}

/// Finalize the output by flushing the buffer.
#[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(())
}