diff options
| -rw-r--r-- | src/bin/git-sugpatch.rs | 45 | ||||
| -rw-r--r-- | src/lib.rs | 3 | ||||
| -rw-r--r-- | src/suggestion.rs | 53 | 
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()), +    );  } @@ -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); +    } +} | 
