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)
}
}