1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 15:49:44 -05:00

cleanup(ext/http): simplify cookie header handling (#11704)

cleanup(ext/http): simplify cookie header handling

Use `Vec::join` instead of essentially reimplementing it. There should be no meaningful performance delta
This commit is contained in:
Aaron O'Mullan 2021-08-14 14:35:58 +02:00 committed by GitHub
parent fb135dc3e4
commit c87b13e745
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -293,15 +293,13 @@ fn req_headers(
// mangled by the `Headers` object in JS. What we do is take all cookie
// headers and concat them into a single cookie header, seperated by
// semicolons.
let mut total_cookie_length = 0;
let cookie_sep = "; ".as_bytes();
let mut cookies = vec![];
let mut headers = Vec::with_capacity(req.headers().len());
for (name, value) in req.headers().iter() {
if name == hyper::header::COOKIE {
let bytes = value.as_bytes();
total_cookie_length += bytes.len();
cookies.push(bytes);
cookies.push(value.as_bytes());
} else {
let name: &[u8] = name.as_ref();
let value = value.as_bytes();
@ -310,18 +308,9 @@ fn req_headers(
}
if !cookies.is_empty() {
let cookie_count = cookies.len();
total_cookie_length += (cookie_count * 2) - 2;
let mut bytes = Vec::with_capacity(total_cookie_length);
for (i, cookie) in cookies.into_iter().enumerate() {
bytes.extend(cookie);
if i != cookie_count - 1 {
bytes.extend("; ".as_bytes());
}
}
headers.push((
ByteString("cookie".as_bytes().to_owned()),
ByteString(bytes),
ByteString(cookies.join(cookie_sep)),
));
}