diff options
| author | A Farzat <a@farzat.xyz> | 2026-06-05 17:10:13 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-06-05 17:10:13 +0300 |
| commit | 42cf4779295b1a1660ed432360ddecbed96eed84 (patch) | |
| tree | c255846f599285a4d6608e35b2346f67d5b0af0c /src/renderer.rs | |
| parent | f610726fdeee1cd33aad675033e0c6d935c3c74c (diff) | |
| download | repo2markdown-42cf4779295b1a1660ed432360ddecbed96eed84.tar.gz repo2markdown-42cf4779295b1a1660ed432360ddecbed96eed84.zip | |
Test binary file rendering in Renderer
Diffstat (limited to 'src/renderer.rs')
| -rw-r--r-- | src/renderer.rs | 32 |
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); + } } |
