1use http::HeaderMap;
2
3use crate::{Cookie, CookieJar};
4
5impl CookieJar {
6 pub fn from_headers(headers: &HeaderMap) -> Self {
7 let iter = headers
8 .get_all("cookie")
9 .into_iter()
10 .filter_map(|header| header.to_str().ok())
11 .flat_map(|cookie_str| cookie_str.split(';'))
12 .filter_map(|string| Cookie::parse_cookie_encoded(string).ok());
13
14 CookieJar::from_original(iter)
15 }
16
17 pub fn write_cookies(self, headers: &mut HeaderMap) {
18 for cookie in self.iter_non_original() {
19 if let Some(header) = cookie
20 .serialize_encoded()
21 .ok()
22 .and_then(|string| string.parse().ok())
23 {
24 headers.append("set-cookie", header);
25 }
26 }
27 }
28}