dumpfs 0.1.0

A tool for dumping codebase information for LLMs efficiently and effectively
Documentation
use super::ScannerError;
use super::{FsDirectoryNode, FsScanStats};
use crate::fs::FsFmtOpts;
use std::{fmt::Write, path::Path};
use tap::Pipe;

#[derive(Debug)]
pub struct FsScanOutput {
    pub root: FsDirectoryNode,
    pub stats: FsScanStats,
    pub duration: std::time::Duration,
}

impl FsScanOutput {
    pub fn llmtext_to<W: Write>(
        &self,
        writer: &mut W,
        opts: FsFmtOpts,
    ) -> Result<(), ScannerError> {
        crate::fs::fmt_write(writer, &self.root, opts).map_err(Into::into)
    }

    pub fn llmtext_save(
        &self,
        path: impl AsRef<Path>,
        opts: FsFmtOpts,
    ) -> Result<(), ScannerError> {
        let ext = opts.format.extension();
        let path = path.as_ref().pipe(|p| {
            p.extension()
                .is_none()
                .then(|| p.with_extension(ext))
                .unwrap_or(p.into())
        });
        crate::fs::fmt_save(path, &self.root, opts).map_err(Into::into)
    }
}