aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bin/git-sugpatch.rs45
-rw-r--r--src/lib.rs3
-rw-r--r--src/suggestion.rs53
3 files changed, 60 insertions, 41 deletions
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<F>(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);
+ }
+}