diff options
| author | A Farzat <a@farzat.xyz> | 2026-06-18 21:43:34 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-06-18 21:43:34 +0300 |
| commit | 64edb40a08a1e8de5fbae8730b021f2cc2f31edb (patch) | |
| tree | 79832b11bb6e730c427f74e07cee7953a2ab39a5 | |
| parent | 591039b3435be05d18ca9a2cc633f2ea88d700d5 (diff) | |
| download | repo2markdown-64edb40a08a1e8de5fbae8730b021f2cc2f31edb.tar.gz repo2markdown-64edb40a08a1e8de5fbae8730b021f2cc2f31edb.zip | |
Move the logic from main.rs to make it testable
| -rw-r--r-- | src/cli.rs | 4 | ||||
| -rw-r--r-- | src/main.rs | 31 | ||||
| -rw-r--r-- | src/run.rs | 77 |
3 files changed, 82 insertions, 30 deletions
@@ -71,9 +71,9 @@ mod tests { use std::path::PathBuf; use clap::Parser; - use repo2markdown::logger::Verbosity; + use repo2markdown::{logger::Verbosity, renderer::RenderOptions}; - use super::{Cli, RenderOptions}; + use super::Cli; #[test] fn cli_uses_default_paths_and_normal_verbosity() { diff --git a/src/main.rs b/src/main.rs index 0cb672f..3a89188 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,11 @@ mod cli; +mod run; use std::io; use clap::Parser; -use repo2markdown::{ - fenced_md_generator::generate_fenced_markdown, logger::Logger, - md_generator::generate_markdown_from_paths, -}; -use crate::cli::Cli; +use crate::{cli::Cli, run::run}; fn main() -> Result<(), Box<dyn std::error::Error>> { let cli = Cli::parse(); @@ -16,27 +13,5 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { let stdin = io::stdin(); let stdout = io::stdout(); - let logger = Logger::new(cli.verbosity()); - - if cli.fenced { - generate_fenced_markdown( - stdin.lock(), - stdout.lock(), - cli.render_options(), - &cli.root, - &cli.origin, - cli.name.as_deref(), - logger, - ) - } else { - generate_markdown_from_paths( - stdin.lock(), - stdout.lock(), - cli.render_options(), - &cli.root, - &cli.origin, - cli.name.as_deref(), - logger, - ) - } + run(&cli, stdin.lock(), stdout.lock()) } diff --git a/src/run.rs b/src/run.rs new file mode 100644 index 0000000..e9a32c2 --- /dev/null +++ b/src/run.rs @@ -0,0 +1,77 @@ +use std::io::{Read, Write}; + +use repo2markdown::{ + fenced_md_generator::generate_fenced_markdown, logger::Logger, + md_generator::generate_markdown_from_paths, +}; + +use crate::cli::Cli; + +pub fn run<R: Read, W: Write>( + cli: &Cli, + input: R, + output: W, +) -> Result<(), Box<dyn std::error::Error>> { + let logger = Logger::new(cli.verbosity()); + + if cli.fenced { + generate_fenced_markdown( + input, + output, + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } else { + generate_markdown_from_paths( + input, + output, + cli.render_options(), + &cli.root, + &cli.origin, + cli.name.as_deref(), + logger, + ) + } +} + +#[cfg(test)] +mod tests { + use std::io::Cursor; + + use clap::Parser; + + use crate::cli::Cli; + + use super::run; + + #[test] + fn run_does_not_fence_output_by_default() { + let cli = Cli::try_parse_from(["repo2markdown", "--name", "Project name"]).unwrap(); + + let input = Cursor::new(b""); + let mut output = Vec::new(); + + run(&cli, input, &mut output).unwrap(); + + assert_eq!(String::from_utf8(output).unwrap(), "# Project name\n"); + } + + #[test] + fn run_uses_fenced_output_when_requested() { + let cli = + Cli::try_parse_from(["repo2markdown", "--fenced", "--name", "Project name"]).unwrap(); + + let input = Cursor::new(b""); + let mut output = Vec::new(); + + run(&cli, input, &mut output).unwrap(); + + assert_eq!( + String::from_utf8(output).unwrap(), + "```markdown\n# Project name\n```\n" + ); + } +} |
