context_creator/formatters/
plain.rs1use super::{DigestData, DigestFormatter};
4use crate::core::walker::FileInfo;
5use anyhow::Result;
6
7pub struct PlainFormatter {
9 buffer: String,
10}
11
12impl PlainFormatter {
13 pub fn new() -> Self {
15 Self {
16 buffer: String::new(),
17 }
18 }
19}
20
21impl Default for PlainFormatter {
22 fn default() -> Self {
23 Self::new()
24 }
25}
26
27impl DigestFormatter for PlainFormatter {
28 fn render_header(&mut self, _data: &DigestData) -> Result<()> {
29 self.buffer
30 .push_str("================================================================\n");
31 self.buffer.push_str("Code Digest\n");
32 self.buffer
33 .push_str("================================================================\n\n");
34 Ok(())
35 }
36
37 fn render_statistics(&mut self, data: &DigestData) -> Result<()> {
38 self.buffer.push_str("File Summary:\n");
39 self.buffer
40 .push_str(&format!("Total files: {}\n\n", data.files.len()));
41 Ok(())
42 }
43
44 fn render_file_tree(&mut self, _data: &DigestData) -> Result<()> {
45 Ok(())
47 }
48
49 fn render_toc(&mut self, _data: &DigestData) -> Result<()> {
50 Ok(())
52 }
53
54 fn render_file_details(&mut self, file: &FileInfo, data: &DigestData) -> Result<()> {
55 self.buffer
56 .push_str("----------------------------------------------------------------\n");
57 self.buffer
58 .push_str(&format!("File: {}\n", file.relative_path.display()));
59 self.buffer
60 .push_str("----------------------------------------------------------------\n\n");
61
62 if let Ok(content) = data.cache.get_or_load(&file.path) {
64 self.buffer.push_str(&content);
65 self.buffer.push_str("\n\n");
66 }
67 Ok(())
68 }
69
70 fn finalize(self: Box<Self>) -> String {
71 self.buffer
72 }
73
74 fn format_name(&self) -> &'static str {
75 "plain"
76 }
77}