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 { 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}")))), } } }