use crate::local::ProtoLocal;
use reqwest::header::{HeaderMap, HeaderValue};
use std::collections::HashMap;
pub trait HttpConfig {
fn headers(&self) -> HeaderMap;
fn cookies(&self) -> &HashMap<String, String>;
fn cookies_mut(&mut self) -> &mut HashMap<String, String>;
fn extend_cookies(&mut self, cookies: HashMap<String, String>) {
self.cookies_mut().extend(cookies);
}
fn cookie_value(&self, keys: impl IntoIterator<Item = impl AsRef<str>>) -> HeaderValue {
let cookies = self.cookies();
keys.into_iter()
.filter_map(|k| {
let k = k.as_ref();
cookies.get(k).map(|v| format!("{k}={v}; "))
})
.collect::<String>()
.parse()
.unwrap()
}
}
pub trait Config: HttpConfig + ProtoLocal {}
impl<T> Config for T where T: HttpConfig + ProtoLocal {}