diff options
| author | A Farzat <a@farzat.xyz> | 2026-06-20 14:41:13 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-06-20 15:59:54 +0300 |
| commit | 4ec209d3863e913cffbe8c6e0a14a292820a2715 (patch) | |
| tree | aeb79461140bd2fb7266b7c0a1bc0fda7d378f56 /src/fenced_md_generator.rs | |
| parent | 0b679b0b5d81ad8c5f61031ffe56b3f646ba9234 (diff) | |
| download | repo2markdown-4ec209d3863e913cffbe8c6e0a14a292820a2715.tar.gz repo2markdown-4ec209d3863e913cffbe8c6e0a14a292820a2715.zip | |
Move input parsing from md_generator to run
Diffstat (limited to 'src/fenced_md_generator.rs')
| -rw-r--r-- | src/fenced_md_generator.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/fenced_md_generator.rs b/src/fenced_md_generator.rs index 7cc5e37..bf44e3a 100644 --- a/src/fenced_md_generator.rs +++ b/src/fenced_md_generator.rs @@ -3,25 +3,22 @@ //! This module is useful when the generated project Markdown needs to be embedded inside another //! document or a prompt. -use std::{ - io::{Read, Write}, - path::Path, -}; +use std::{io::Write, path::Path}; use crate::{ logger::Logger, md_generator::generate_markdown_from_paths, renderer::RenderOptions, util::fence::generate_outer_backticks, }; -/// Generates Markdown from a null-separated path list and wraps the full output in a fence. +/// Generates Markdown from `paths` and wraps the full output in a fence. /// /// The inner Markdown is produced by [`generate_markdown_from_paths`]. The outer fence length is /// chosen so that any backtick runs inside the generated Markdown cannot close the outer fence. /// /// `render_options` controls file-size limits and placeholder behavior. `root` controls displayed /// relative paths, while `origin_base` controls how relative input paths are resolved. -pub fn generate_fenced_markdown<R: Read, W: Write>( - input: R, +pub fn generate_fenced_markdown<W: Write>( + paths: &[&Path], mut output: W, render_options: RenderOptions, root: &Path, @@ -31,7 +28,7 @@ pub fn generate_fenced_markdown<R: Read, W: Write>( ) -> Result<(), Box<dyn std::error::Error>> { let mut md_output = Vec::new(); generate_markdown_from_paths( - input, + paths, &mut md_output, render_options, root, @@ -49,7 +46,8 @@ pub fn generate_fenced_markdown<R: Read, W: Write>( #[cfg(test)] mod tests { use std::fs; - use std::io::{Cursor, Read, Write}; + use std::io::Write; + use std::path::Path; use tempfile::tempdir; use crate::logger::Logger; @@ -57,8 +55,8 @@ mod tests { use super::generate_fenced_markdown; - fn wrap_with_defaults<R: Read, W: Write>( - input: R, + fn generate_fenced_with_defaults<W: Write>( + paths: &[&Path], output: W, root: &std::path::Path, origin_base: &std::path::Path, @@ -67,7 +65,7 @@ mod tests { let logger = Logger::default(); let render_options = RenderOptions::default(); generate_fenced_markdown( - input, + paths, output, render_options, root, @@ -78,14 +76,15 @@ mod tests { } #[test] - fn empty_input_produces_wrapped_header() { + fn empty_path_list_produces_wrapped_header() { let temp_dir = tempdir().unwrap(); - let input = Cursor::new(b""); + let paths = []; let mut output = Vec::new(); let root = temp_dir.path(); let origin_base = temp_dir.path(); - wrap_with_defaults(input, &mut output, root, origin_base, Some("Project name")).unwrap(); + generate_fenced_with_defaults(&paths, &mut output, root, origin_base, Some("Project name")) + .unwrap(); assert_eq!( String::from_utf8(output).unwrap(), @@ -97,13 +96,13 @@ mod tests { fn single_file_is_wrapped() { let temp_dir = tempdir().unwrap(); let origin_base = temp_dir.path(); - let input = Cursor::new(b"test_main.rs\0"); + let paths = [Path::new("test_main.rs")]; let mut output = Vec::new(); let root = temp_dir.path(); fs::write(origin_base.join("test_main.rs"), "fn main() {}").unwrap(); - wrap_with_defaults(input, &mut output, root, origin_base, None).unwrap(); + generate_fenced_with_defaults(&paths, &mut output, root, origin_base, None).unwrap(); let output_str = String::from_utf8(output).unwrap(); // Must contain outer fence @@ -115,17 +114,17 @@ mod tests { } #[test] - fn multiple_files_are_enveloped_using_only_one_outer_fence_while_each_having_its_own_fence() { + fn multiple_files_are_wrapped_in_one_outer_fence() { let temp_dir = tempdir().unwrap(); let origin_base = temp_dir.path(); - let input = Cursor::new(b"a.rs\0b.rs\0"); + let paths = [Path::new("a.rs"), Path::new("b.rs")]; let mut output = Vec::new(); let root = temp_dir.path(); fs::write(origin_base.join("a.rs"), "A").unwrap(); fs::write(origin_base.join("b.rs"), "B").unwrap(); - wrap_with_defaults(input, &mut output, root, origin_base, None).unwrap(); + generate_fenced_with_defaults(&paths, &mut output, root, origin_base, None).unwrap(); let output_str = String::from_utf8(output).unwrap(); // Each inner file must have its own languageāspecific fence @@ -140,14 +139,14 @@ mod tests { fn inner_file_with_four_backticks_causes_outer_fence_of_six_backticks() { let temp_dir = tempdir().unwrap(); let origin_base = temp_dir.path(); - let input = Cursor::new(b"backticks.rs\0"); + let paths = [Path::new("backticks.rs")]; let mut output = Vec::new(); let root = temp_dir.path(); let content = "````"; // 4 backticks fs::write(origin_base.join("backticks.rs"), content).unwrap(); - wrap_with_defaults(input, &mut output, root, origin_base, None).unwrap(); + generate_fenced_with_defaults(&paths, &mut output, root, origin_base, None).unwrap(); let output_str = String::from_utf8(output).unwrap(); // Inner fence should be 5 backticks because inner content contains 4 backticks @@ -160,13 +159,14 @@ mod tests { #[test] fn project_title_with_three_backticks_causes_outer_fence_of_four_backticks() { let temp_dir = tempdir().unwrap(); - let input = Cursor::new(b""); + let paths = []; let mut output = Vec::new(); let root = temp_dir.path(); let origin_base = temp_dir.path(); let project_title = "Project ``` name"; - wrap_with_defaults(input, &mut output, root, origin_base, Some(project_title)).unwrap(); + generate_fenced_with_defaults(&paths, &mut output, root, origin_base, Some(project_title)) + .unwrap(); let output_str = String::from_utf8(output).unwrap(); // Outer fence must be 4 backticks because the header contains 3 backticks |
