mirror of
https://github.com/Hopiu/lychee.git
synced 2026-04-19 04:31:05 +00:00
Don't panic on unknown status codes (#234)
This commit is contained in:
parent
fa920d24b8
commit
e188e72fc0
3 changed files with 14 additions and 3 deletions
|
|
@ -16,7 +16,7 @@ pub(crate) fn color_response(response: &ResponseBody) -> String {
|
|||
Status::Ok(_) => style(response).green().bright(),
|
||||
Status::Excluded | Status::Unsupported(_) => style(response).dim(),
|
||||
Status::Redirected(_) => style(response),
|
||||
Status::Timeout(_) => style(response).yellow().bright(),
|
||||
Status::UnknownStatusCode(_) | Status::Timeout(_) => style(response).yellow().bright(),
|
||||
Status::Error(_) => style(response).red().bright(),
|
||||
};
|
||||
out.to_string()
|
||||
|
|
@ -27,6 +27,7 @@ pub(crate) struct ResponseStats {
|
|||
total: usize,
|
||||
successful: usize,
|
||||
failures: usize,
|
||||
unknown: usize,
|
||||
timeouts: usize,
|
||||
redirects: usize,
|
||||
excludes: usize,
|
||||
|
|
@ -52,6 +53,7 @@ impl ResponseStats {
|
|||
match status {
|
||||
Status::Ok(_) => self.successful += 1,
|
||||
Status::Error(_) => self.failures += 1,
|
||||
Status::UnknownStatusCode(_) => self.unknown += 1,
|
||||
Status::Timeout(_) => self.timeouts += 1,
|
||||
Status::Redirected(_) => self.redirects += 1,
|
||||
Status::Excluded => self.excludes += 1,
|
||||
|
|
@ -105,6 +107,7 @@ impl Display for ResponseStats {
|
|||
write_stat(f, "\u{23f3} Timeouts", self.timeouts, true)?; // ⏳
|
||||
write_stat(f, "\u{1f500} Redirected", self.redirects, true)?; // 🔀
|
||||
write_stat(f, "\u{1f47b} Excluded", self.excludes, true)?; // 👻
|
||||
write_stat(f, "\u{26a0} Unknown", self.unknown, true)?; // ⚠️
|
||||
write_stat(f, "\u{1f6ab} Errors", self.errors + self.failures, false)?; // 🚫
|
||||
|
||||
for (input, responses) in &self.fail_map {
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ mod cli {
|
|||
total: usize,
|
||||
successful: usize,
|
||||
failures: usize,
|
||||
unknown: usize,
|
||||
timeouts: usize,
|
||||
redirects: usize,
|
||||
excludes: usize,
|
||||
|
|
@ -53,6 +54,7 @@ mod cli {
|
|||
"total": {},
|
||||
"successful": {},
|
||||
"failures": {},
|
||||
"unknown": {},
|
||||
"timeouts": {},
|
||||
"redirects": {},
|
||||
"excludes": {},
|
||||
|
|
@ -62,6 +64,7 @@ mod cli {
|
|||
self.total,
|
||||
self.successful,
|
||||
self.failures,
|
||||
self.unknown,
|
||||
self.timeouts,
|
||||
self.redirects,
|
||||
self.excludes,
|
||||
|
|
@ -364,7 +367,7 @@ mod cli {
|
|||
.assert()
|
||||
.success();
|
||||
|
||||
let expected = r#"{"total":10,"successful":10,"failures":0,"timeouts":0,"redirects":0,"excludes":0,"errors":0,"fail_map":{}}"#;
|
||||
let expected = r#"{"total":10,"successful":10,"failures":0,"unknown":0,"timeouts":0,"redirects":0,"excludes":0,"errors":0,"fail_map":{}}"#;
|
||||
let output = fs::read_to_string(&outfile)?;
|
||||
assert_eq!(output.split_whitespace().collect::<String>(), expected);
|
||||
fs::remove_file(outfile)?;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ const ICON_OK: &str = "\u{2714}"; // ✔
|
|||
const ICON_REDIRECTED: &str = "\u{21c4}"; // ⇄
|
||||
const ICON_EXCLUDED: &str = "\u{003f}"; // ?
|
||||
const ICON_UNSUPPORTED: &str = "\u{003f}"; // ? (using same icon, but under different name for explicitness)
|
||||
const ICON_UNKNOWN: &str = "\u{003f}"; // ?
|
||||
const ICON_ERROR: &str = "\u{2717}"; // ✗
|
||||
const ICON_TIMEOUT: &str = "\u{29d6}"; // ⧖
|
||||
|
||||
|
|
@ -25,6 +26,8 @@ pub enum Status {
|
|||
Timeout(Option<StatusCode>),
|
||||
/// Got redirected to different resource
|
||||
Redirected(StatusCode),
|
||||
/// The given status code is not known by lychee
|
||||
UnknownStatusCode(StatusCode),
|
||||
/// Resource was excluded from checking
|
||||
Excluded,
|
||||
/// The request type is currently not supported,
|
||||
|
|
@ -38,6 +41,7 @@ impl Display for Status {
|
|||
match self {
|
||||
Status::Ok(c) => write!(f, "OK ({})", c),
|
||||
Status::Redirected(c) => write!(f, "Redirect ({})", c),
|
||||
Status::UnknownStatusCode(c) => write!(f, "Unknown status: {}", c),
|
||||
Status::Excluded => f.write_str("Excluded"),
|
||||
Status::Timeout(Some(c)) => write!(f, "Timeout ({})", c),
|
||||
Status::Timeout(None) => f.write_str("Timeout"),
|
||||
|
|
@ -69,8 +73,8 @@ impl Status {
|
|||
match response.error_for_status_ref() {
|
||||
Ok(_) if code.is_success() => Self::Ok(code),
|
||||
Ok(_) if code.is_redirection() => Self::Redirected(code),
|
||||
Ok(_) => Self::UnknownStatusCode(code),
|
||||
Err(e) => e.into(),
|
||||
Ok(_) => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -116,6 +120,7 @@ impl Status {
|
|||
match self {
|
||||
Status::Ok(_) => ICON_OK,
|
||||
Status::Redirected(_) => ICON_REDIRECTED,
|
||||
Status::UnknownStatusCode(_) => ICON_UNKNOWN,
|
||||
Status::Excluded => ICON_EXCLUDED,
|
||||
Status::Error(_) => ICON_ERROR,
|
||||
Status::Timeout(_) => ICON_TIMEOUT,
|
||||
|
|
|
|||
Loading…
Reference in a new issue