summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2026-06-05 17:31:17 +0300
committerA Farzat <a@farzat.xyz>2026-06-05 17:31:17 +0300
commit546c3ca751d922bf48183c6602d6040074dc8590 (patch)
treeb04c1162177ef487c87c5c0e663bbb690b159145 /src/main.rs
parentedce5e25792c55bbd3e34104613b0b749a1785db (diff)
downloadrepo2markdown-546c3ca751d922bf48183c6602d6040074dc8590.tar.gz
repo2markdown-546c3ca751d922bf48183c6602d6040074dc8590.zip
Use Renderer instead of renderer in main.rs
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs25
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(())
}