From 344f4d3fcd7d36e67ca04dd2e3e21f0e8b12b0dd Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 2 Aug 2020 05:30:03 +0200 Subject: git-sugpatch: Move the suggestion arguments loop to a new function Split this out into a separate function because I want to reuse it in `git-sugapply`. --- src/bin/git-sugpatch.rs | 45 +++++------------------------------------ src/lib.rs | 3 ++- src/suggestion.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 41 deletions(-) create mode 100644 src/suggestion.rs (limited to 'src') diff --git a/src/bin/git-sugpatch.rs b/src/bin/git-sugpatch.rs index c4969b1..5b95519 100644 --- a/src/bin/git-sugpatch.rs +++ b/src/bin/git-sugpatch.rs @@ -3,8 +3,7 @@ use std::process; use exitcode; -use github_suggestion::{Client, SuggestionUrl}; -use github_suggestion_cli::{gseprintln, is_suggestion_id}; +use github_suggestion_cli::{gseprintln, for_suggestion}; use github_suggestion_cli::config::Config; @@ -24,42 +23,8 @@ fn main() { process::exit(111); } - for suggestion_arg in config.suggestions { - let suggestion = if match is_suggestion_id(&suggestion_arg) { - Ok(p) => p, - Err(e) => { - gseprintln!(e); - - process::exit(exitcode::SOFTWARE); - } - } { - let o_r = match &config.o_r { - Ok(o_r) => o_r, - Err(e) => { - gseprintln!(e); - process::exit(exitcode::CONFIG); - }, - }; - - let client = Client::new( - &config.github_token, - &o_r.owner, - &o_r.repo, - ).unwrap(); - - client.fetch(&suggestion_arg).unwrap() - } else { - let url: SuggestionUrl = suggestion_arg.parse().unwrap(); - - let client = Client::new( - &config.github_token, - &url.owner, - &url.repo, - ).unwrap(); - - client.fetch(&url.comment_id).unwrap() - }; - - print!("{}", suggestion.diff().unwrap()); - } + for_suggestion( + &config, + |suggestion| print!("{}", suggestion.diff().unwrap()), + ); } diff --git a/src/lib.rs b/src/lib.rs index 0a8ab13..e2ac7ea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,6 +6,7 @@ pub mod error; pub(crate) mod owner_repo; mod arg; +mod suggestion; -pub use arg::is_suggestion_id; +pub use suggestion::for_suggestion; diff --git a/src/suggestion.rs b/src/suggestion.rs new file mode 100644 index 0000000..9617a00 --- /dev/null +++ b/src/suggestion.rs @@ -0,0 +1,53 @@ +use std::process; + +use exitcode; + +use github_suggestion::{Client, Suggestion, SuggestionUrl}; + +use crate::gseprintln; +use crate::arg::is_suggestion_id; +use crate::config::Config; + + +pub fn for_suggestion(config: &Config, f: F) +where F: Fn(&Suggestion) +{ + for suggestion_arg in &config.suggestions { + let suggestion = if match is_suggestion_id(&suggestion_arg) { + Ok(p) => p, + Err(e) => { + gseprintln!(e); + + process::exit(exitcode::SOFTWARE); + } + } { + let o_r = match &config.o_r { + Ok(o_r) => o_r, + Err(e) => { + gseprintln!(e); + process::exit(exitcode::CONFIG); + }, + }; + + let client = Client::new( + &config.github_token, + &o_r.owner, + &o_r.repo, + ).unwrap(); + + client.fetch(&suggestion_arg).unwrap() + } else { + let url: SuggestionUrl = suggestion_arg.parse().unwrap(); + + let client = Client::new( + &config.github_token, + &url.owner, + &url.repo, + ).unwrap(); + + client.fetch(&url.comment_id).unwrap() + }; + + f(&suggestion); + } +} -- cgit v1.2.3