diff --git a/src/checker.rs b/src/checker.rs index d6cce99..4ab3a70 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -11,11 +11,12 @@ use url::Url; pub(crate) struct Checker { reqwest_client: reqwest::blocking::Client, gh_client: Github, + verbose: bool, } impl Checker { /// Creates a new link checker - pub fn try_new(token: String) -> Result { + pub fn try_new(token: String, verbose: bool) -> Result { let mut headers = header::HeaderMap::new(); // Faking the user agent is necessary for some websites, unfortunately. // Otherwise we get a 403 from the firewall (e.g. Sucuri/Cloudproxy on ldra.com). @@ -31,6 +32,7 @@ impl Checker { Ok(Checker { reqwest_client, gh_client, + verbose, }) } @@ -73,7 +75,7 @@ impl Checker { Ok((owner.as_str().into(), repo.as_str().into())) } - pub fn check(&self, url: &Url) -> bool { + pub fn check_real(&self, url: &Url) -> bool { if self.check_normal(&url) { return true; } @@ -84,6 +86,21 @@ impl Checker { } false } + + pub fn check(&self, url: &Url) -> bool { + let ret = self.check_real(&url); + match ret { + true => { + if self.verbose { + println!("✅{}", &url); + } + } + false => { + println!("❌{}", &url); + } + }; + ret + } } #[cfg(test)] diff --git a/src/main.rs b/src/main.rs index d2fcc37..ec01e39 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,23 +25,16 @@ fn main() -> Result<()> { input: args.opt_value_from_str(["-i", "--input"])?, }; - let checker = Checker::try_new(env::var("GITHUB_TOKEN")?)?; + let checker = Checker::try_new(env::var("GITHUB_TOKEN")?, args.verbose)?; let md = fs::read_to_string(args.input.unwrap_or_else(|| "README.md".into()))?; let links = extract_links(&md); - let mut errorcode = 0; - for link in links { - match checker.check(&link) { - true => { - if args.verbose { - println!("✅{}", link); - } - } - false => { - println!("❌{}", link); - errorcode = 1; - } - } - } + let results: Vec = links.iter().map(|l| checker.check(&l)).collect(); + + let errorcode = if results.iter().all(|r| r == &true) { + 0 + } else { + 1 + }; std::process::exit(errorcode) }