diff options
| author | A Farzat <a@farzat.xyz> | 2026-06-05 17:31:17 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-06-05 17:31:17 +0300 |
| commit | 546c3ca751d922bf48183c6602d6040074dc8590 (patch) | |
| tree | b04c1162177ef487c87c5c0e663bbb690b159145 | |
| parent | edce5e25792c55bbd3e34104613b0b749a1785db (diff) | |
| download | repo2markdown-546c3ca751d922bf48183c6602d6040074dc8590.tar.gz repo2markdown-546c3ca751d922bf48183c6602d6040074dc8590.zip | |
Use Renderer instead of renderer in main.rs
| -rw-r--r-- | src/main.rs | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs index 92b84c4..1468073 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,13 @@ use std::{ env, ffi::OsStr, + fs::File, io::{self, Read, Write}, os::unix::ffi::OsStrExt, path::Path, }; -use repo2markdown::{normalizer::Normalizer, renderer::render}; +use repo2markdown::{normalizer::Normalizer, renderer::Renderer}; fn main() -> Result<(), Box<dyn std::error::Error>> { let mut args = env::args().skip(1); @@ -47,7 +48,7 @@ const DEFAULT_PROJECT_NAME: &str = "Project Outline"; pub fn run<R: Read, W: Write>( mut input: R, - mut output: W, + output: W, root: &Path, origin_base: &Path, project_name: Option<&str>, @@ -55,9 +56,12 @@ pub fn run<R: Read, W: Write>( let mut buf = Vec::new(); input.read_to_end(&mut buf)?; - let mut owned = Vec::new(); let normalizer = Normalizer::new(root, origin_base)?; + let mut renderer = Renderer::new(output); + let project_name = project_name.unwrap_or_else(|| derive_project_name(root)); + renderer.render_header(project_name)?; + for segment in buf.split(|b| *b == 0) { if segment.is_empty() { continue; @@ -65,20 +69,9 @@ pub fn run<R: Read, W: Write>( let path = Path::new(OsStr::from_bytes(segment)); let normalized_path = normalizer.normalize(path)?; - let bytes = std::fs::read(normalized_path.absolute)?; - - owned.push((normalized_path.relative, bytes)); + let file = File::open(normalized_path.absolute)?; + renderer.render_file(&normalized_path.relative, file)?; } - - // convert to expected renderer input - let refs: Vec<(&Path, &[u8])> = owned - .iter() - .map(|(p, b)| (p.as_path(), b.as_slice())) - .collect(); - - let project_name = project_name.unwrap_or_else(|| derive_project_name(root)); - let rendered = render(project_name, &refs)?; - output.write_all(rendered.as_bytes())?; Ok(()) } |
