diff options
Diffstat (limited to 'src/renderer.rs')
| -rw-r--r-- | src/renderer.rs | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/src/renderer.rs b/src/renderer.rs index d9cf7b4..4223a00 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -24,13 +24,17 @@ pub struct Renderer<W: Write> { } impl<W: Write> Renderer<W> { - pub fn new(output: W) -> Self { + pub fn new_with_defaults(output: W) -> Self { + Self::new(output, RenderOptions::default()) + } + + pub fn new(output: W, config: RenderOptions) -> Self { Self { output, - max_file_size: DEFAULT_MAX_FILE_SIZE, + max_file_size: config.max_file_size, logger: Logger::default(), - placeholder_for_binary_files: false, - placeholder_for_large_files: false, + placeholder_for_binary_files: config.placeholder_for_binary_files, + placeholder_for_large_files: config.placeholder_for_large_files, } } @@ -133,6 +137,23 @@ impl<W: Write> Renderer<W> { } } +#[derive(Debug, Clone, Copy)] +pub struct RenderOptions { + pub max_file_size: u64, + pub placeholder_for_binary_files: bool, + pub placeholder_for_large_files: bool, +} + +impl Default for RenderOptions { + fn default() -> Self { + RenderOptions { + max_file_size: DEFAULT_MAX_FILE_SIZE, + placeholder_for_binary_files: false, + placeholder_for_large_files: false, + } + } +} + fn human_readable_size(bytes: u64) -> String { const UNITS: [&str; 5] = ["B", "KiB", "MiB", "GiB", "TiB"]; @@ -169,7 +190,7 @@ mod tests { #[test] fn renderer_writes_header() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); renderer.render_header("Project name").unwrap(); @@ -179,7 +200,7 @@ mod tests { #[test] fn renderer_renders_single_rust_file_with_language_fence() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("fn main() {}"); renderer.render_file(Path::new("main.rs"), input).unwrap(); @@ -191,7 +212,7 @@ mod tests { #[test] fn binary_files_are_not_included_in_output_at_all_by_default() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new(&[0x00, 0x01, 0x02, 0xc3]); renderer.render_file(Path::new("image.png"), input).unwrap(); @@ -203,7 +224,8 @@ mod tests { #[test] fn renderer_can_place_a_placeholder_for_binary_files() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output).with_binary_file_placeholder(true); + let mut renderer = + Renderer::new_with_defaults(&mut output).with_binary_file_placeholder(true); let input = Cursor::new(&[0x00, 0x01, 0x02, 0xc3]); renderer.render_file(Path::new("image.png"), input).unwrap(); @@ -215,7 +237,7 @@ mod tests { #[test] fn filename_with_linebreaks_and_invalid_chars_handled_properly() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("fn main() {}"); let filename = Path::new(OsStr::from_bytes(b"jap\xE3\x81\x82dir/some\nma\xc3in.rs")); @@ -228,7 +250,7 @@ mod tests { #[test] fn file_with_backticks_is_handled_safely() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("fn main() { println!(\"``` inside\"); }"); renderer @@ -243,7 +265,7 @@ mod tests { #[test] fn unknown_filetype_has_no_language_fence() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("hello world"); renderer.render_file(Path::new("readme"), input).unwrap(); @@ -255,7 +277,7 @@ mod tests { #[test] fn txt_file_has_no_language_fence() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("hello world"); renderer.render_file(Path::new("hello.txt"), input).unwrap(); @@ -267,7 +289,7 @@ mod tests { #[test] fn python_file_has_python_language_fence() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("print('hello')"); renderer.render_file(Path::new("main.py"), input).unwrap(); @@ -279,7 +301,7 @@ mod tests { #[test] fn json_file_has_json_language_fence() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("{\"key\":\"value\"}"); renderer.render_file(Path::new("main.json"), input).unwrap(); @@ -291,7 +313,7 @@ mod tests { #[test] fn uppercase_extension_is_still_detected() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("fn main() {}"); renderer.render_file(Path::new("MAIN.RS"), input).unwrap(); @@ -303,7 +325,7 @@ mod tests { #[test] fn bash_file_detected_from_shebang() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("#! /bin/bash\necho hello"); renderer.render_file(Path::new("hello"), input).unwrap(); @@ -315,7 +337,7 @@ mod tests { #[test] fn python_file_detected_from_shebang() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output); + let mut renderer = Renderer::new_with_defaults(&mut output); let input = Cursor::new("#! /bin/python3\nprint('hello')"); renderer.render_file(Path::new("hello"), input).unwrap(); @@ -327,7 +349,7 @@ mod tests { #[test] fn large_files_are_not_included_in_output_at_all_by_default() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output).with_max_file_size(5); // smaller than file + let mut renderer = Renderer::new_with_defaults(&mut output).with_max_file_size(5); // smaller than file let temp_dir = tempdir().unwrap(); let file_path = temp_dir.path().join("big.txt"); @@ -348,7 +370,7 @@ mod tests { #[test] fn renderer_can_place_a_placeholder_for_large_files() { let mut output = Vec::new(); - let mut renderer = Renderer::new(&mut output) + let mut renderer = Renderer::new_with_defaults(&mut output) .with_large_file_placeholder(true) .with_max_file_size(5); // smaller than file |
