summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2026-06-05 17:10:13 +0300
committerA Farzat <a@farzat.xyz>2026-06-05 17:10:13 +0300
commit42cf4779295b1a1660ed432360ddecbed96eed84 (patch)
treec255846f599285a4d6608e35b2346f67d5b0af0c /src
parentf610726fdeee1cd33aad675033e0c6d935c3c74c (diff)
downloadrepo2markdown-42cf4779295b1a1660ed432360ddecbed96eed84.tar.gz
repo2markdown-42cf4779295b1a1660ed432360ddecbed96eed84.zip
Test binary file rendering in Renderer
Diffstat (limited to 'src')
-rw-r--r--src/renderer.rs32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/renderer.rs b/src/renderer.rs
index 88f3623..a70c3be 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -35,16 +35,28 @@ impl<W: Write> Renderer<W> {
}
pub fn render_file<R: Read>(&mut self, filename: &Path, mut reader: R) -> std::io::Result<()> {
- let mut buf = String::new();
- reader.read_to_string(&mut buf)?;
+ let mut bytes = Vec::new();
+ reader.read_to_end(&mut bytes)?;
+ let contents = if let Ok(utf8string) = std::str::from_utf8(&bytes) {
+ utf8string
+ } else {
+ return self.render_binary_file(filename);
+ };
let name = render_filename(filename);
- let fence = outer_backticks(&buf);
+ let fence = outer_backticks(contents);
writeln!(self.output)?;
writeln!(self.output, "## File: {}", name)?;
writeln!(self.output, "{}", fence)?;
- writeln!(self.output, "{}", buf)?;
+ writeln!(self.output, "{}", contents)?;
writeln!(self.output, "{}", fence)
}
+
+ fn render_binary_file(&mut self, filename: &Path) -> std::io::Result<()> {
+ let name = render_filename(filename);
+ writeln!(self.output)?;
+ writeln!(self.output, "## File: {}", name)?;
+ writeln!(self.output, "[BINARY FILE]")
+ }
}
pub fn render(project_name: &str, files: &[(&Path, &[u8])]) -> Result<String, RenderError> {
@@ -208,4 +220,16 @@ mod tests {
assert_eq!(String::from_utf8(output).unwrap(), expected);
}
+
+ #[test]
+ fn renderer_places_a_placeholder_for_binary_files_by_default() {
+ let mut output = Vec::new();
+ let mut renderer = Renderer::new(&mut output);
+
+ let input = Cursor::new(&[0x00, 0x01, 0x02, 0xc3]);
+ renderer.render_file(Path::new("image.png"), input).unwrap();
+ let expected = "\n## File: image.png\n[BINARY FILE]\n";
+
+ assert_eq!(String::from_utf8(output).unwrap(), expected);
+ }
}