use std::time::Duration;
use http::{
HeaderMap,
Method,
StatusCode,
};
use url::Url;
use super::HttpResponseMeta;
#[derive(Debug, Clone)]
pub struct HttpResponseInterceptorContext {
status: StatusCode,
headers: HeaderMap,
url: Url,
method: Method,
}
impl HttpResponseInterceptorContext {
pub fn new(status: StatusCode, headers: HeaderMap, url: Url, method: Method) -> Self {
Self {
status,
headers,
url,
method,
}
}
pub fn from_meta(meta: &HttpResponseMeta) -> Self {
Self::new(
meta.status(),
meta.headers().clone(),
meta.url().clone(),
meta.method().clone(),
)
}
#[inline]
pub fn status(&self) -> StatusCode {
self.status
}
#[inline]
pub fn headers(&self) -> &HeaderMap {
&self.headers
}
#[inline]
pub fn headers_mut(&mut self) -> &mut HeaderMap {
&mut self.headers
}
#[inline]
pub fn url(&self) -> &Url {
&self.url
}
#[inline]
pub fn set_url(&mut self, url: Url) -> &mut Self {
self.url = url;
self
}
#[inline]
pub fn method(&self) -> &Method {
&self.method
}
#[inline]
pub fn retry_after_hint(&self) -> Option<Duration> {
HttpResponseMeta::retry_after_hint_from_parts(self.status, &self.headers)
}
pub(super) fn apply_to_meta(self, meta: &mut HttpResponseMeta) {
meta.set_headers(self.headers);
meta.set_url(self.url);
}
}