summaryrefslogtreecommitdiff
path: root/src/fenced_md_generator.rs
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2026-06-20 14:41:13 +0300
committerA Farzat <a@farzat.xyz>2026-06-20 15:59:54 +0300
commit4ec209d3863e913cffbe8c6e0a14a292820a2715 (patch)
treeaeb79461140bd2fb7266b7c0a1bc0fda7d378f56 /src/fenced_md_generator.rs
parent0b679b0b5d81ad8c5f61031ffe56b3f646ba9234 (diff)
downloadrepo2markdown-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.rs48
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