use std::collections::HashSet;
use actix_web::http::header::{HeaderMap, HeaderName, HeaderValue};
#[derive(Clone, Debug)]
pub struct IdempotentOptions {
pub(crate) ignored_headers: HashSet<HeaderName>,
pub(crate) ignored_header_values: HeaderMap,
pub(crate) ignore_all_headers: bool,
}
impl IdempotentOptions {
pub fn new() -> Self {
Self {
ignored_headers: HashSet::new(),
ignored_header_values: HeaderMap::new(),
ignore_all_headers: false,
}
}
pub fn ignore_header(mut self, name: HeaderName) -> Self {
self.ignored_headers.insert(name);
self
}
pub fn ignore_header_with_value(mut self, name: HeaderName, value: HeaderValue) -> Self {
self.ignored_header_values.insert(name, value);
self
}
pub fn ignore_all_headers(mut self) -> Self {
self.ignore_all_headers = true;
self
}
}
impl Default for IdempotentOptions {
fn default() -> Self {
let mut options = Self {
ignored_headers: HashSet::new(),
ignored_header_values: HeaderMap::new(),
ignore_all_headers: false,
};
let default_ignored = [
"user-agent",
"accept",
"accept-encoding",
"accept-language",
"cache-control",
"connection",
"cookie",
"host",
"pragma",
"referer",
"sec-fetch-dest",
"sec-fetch-mode",
"sec-fetch-site",
"sec-ch-ua",
"sec-ch-ua-mobile",
"sec-ch-ua-platform",
];
for header in default_ignored {
options
.ignored_headers
.insert(HeaderName::from_static(header));
}
options
}
}