use std::time::Duration;
use super::body::Body;
use super::headers::Headers;
use super::net_guard::NetGuard;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum RedirectMode {
#[default]
Follow,
Manual,
Error,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum Credentials {
Omit,
#[default]
SameOrigin,
Include,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum ResponseType {
#[default]
Basic,
Cors,
Opaque,
OpaqueRedirect,
Error,
Default,
}
impl ResponseType {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Basic => "basic",
Self::Cors => "cors",
Self::Opaque => "opaque",
Self::OpaqueRedirect => "opaqueredirect",
Self::Error => "error",
Self::Default => "default",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct RemoteAddr {
#[serde(rename = "ipAddress")]
pub ip_address: String,
pub port: u16,
}
#[derive(Debug)]
pub struct Request {
pub method: reqwest::Method,
pub url: reqwest::Url,
pub headers: Headers,
pub body: Body,
pub redirect: RedirectMode,
pub credentials: Credentials,
pub max_redirects: Option<u32>,
pub max_retries: u32,
pub timeout: Duration,
pub ignore_https_errors: bool,
pub net_guard: Option<NetGuard>,
}
#[derive(Debug)]
pub struct Response {
pub status: u16,
pub status_text: String,
pub url: String,
pub headers: Headers,
pub body: Body,
pub redirected: bool,
pub unfollowed_redirect: bool,
pub server_addr: Option<RemoteAddr>,
pub type_: ResponseType,
}
impl Response {
#[must_use]
pub fn ok(&self) -> bool {
(200..300).contains(&self.status)
}
}