context_creator/formatters/
paths.rs

1//! Paths-only formatter that outputs file paths without content
2
3use super::{DigestData, DigestFormatter};
4use crate::core::walker::FileInfo;
5use anyhow::Result;
6
7/// Formatter that outputs only file paths
8pub struct PathsFormatter {
9    buffer: String,
10}
11
12impl PathsFormatter {
13    /// Create a new PathsFormatter
14    pub fn new() -> Self {
15        Self {
16            buffer: String::new(),
17        }
18    }
19}
20
21impl Default for PathsFormatter {
22    fn default() -> Self {
23        Self::new()
24    }
25}
26
27impl DigestFormatter for PathsFormatter {
28    fn render_header(&mut self, _data: &DigestData) -> Result<()> {
29        // Paths formatter doesn't render headers
30        Ok(())
31    }
32
33    fn render_statistics(&mut self, _data: &DigestData) -> Result<()> {
34        // Paths formatter doesn't render statistics
35        Ok(())
36    }
37
38    fn render_file_tree(&mut self, _data: &DigestData) -> Result<()> {
39        // Paths formatter doesn't render file tree
40        Ok(())
41    }
42
43    fn render_toc(&mut self, _data: &DigestData) -> Result<()> {
44        // Paths formatter doesn't render table of contents
45        Ok(())
46    }
47
48    fn render_file_details(&mut self, file: &FileInfo, _data: &DigestData) -> Result<()> {
49        // Only output the relative path
50        self.buffer
51            .push_str(&file.relative_path.display().to_string());
52        self.buffer.push('\n');
53        Ok(())
54    }
55
56    fn finalize(self: Box<Self>) -> String {
57        self.buffer
58    }
59
60    fn format_name(&self) -> &'static str {
61        "paths"
62    }
63}