1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
use std::fmt::Display;
use serde::Deserialize;
use crate::{Error, Status};
#[derive(Debug, Clone, Deserialize)]
pub struct Http {
pub url: String,
#[serde(default = "Http::default_method")]
pub method: String,
#[serde(default = "Http::default_code")]
pub status_code: u16,
}
impl Http {
fn default_method() -> String {
"GET".to_string()
}
fn default_code() -> u16 {
200
}
}
impl Display for Http {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} {}", self.method, self.url)
}
}
impl Http {
pub async fn check(&self, client: reqwest::Client) -> Result<Status, Error> {
let status_code = client
.request(self.method.parse().map_err(|_| Error::Method)?, &self.url)
.send()
.await?
.status()
.as_u16();
match status_code == self.status_code {
true => Ok(Status::Pass),
false => Ok(Status::Fail(Some(format!("Status code: {status_code}")))),
}
}
}
|