avoid parsing when setting headers

This commit is contained in:
Martin Algesten
2018-07-01 18:33:50 +02:00
parent 1812b7f6b8
commit 51744804da
4 changed files with 23 additions and 20 deletions

View File

@@ -117,9 +117,10 @@ impl Agent {
K: Into<String>, K: Into<String>,
V: Into<String>, V: Into<String>,
{ {
let s = format!("{}: {}", header.into(), value.into()); add_header(
let header = s.parse::<Header>().expect("Failed to parse header"); &mut self.headers,
add_header(&mut self.headers, header); Header::new(&header.into(), &value.into()).expect("Failed to parse header"),
);
self self
} }
@@ -153,9 +154,7 @@ impl Agent {
I: IntoIterator<Item = (K, V)>, I: IntoIterator<Item = (K, V)>,
{ {
for (k, v) in headers.into_iter() { for (k, v) in headers.into_iter() {
let s = format!("{}: {}", k.into(), v.into()); self.set(k, v);
let header = s.parse::<Header>().expect("Failed to parse header");
add_header(&mut self.headers, header);
} }
self self
} }
@@ -187,6 +186,7 @@ impl Agent {
/// in all requests using the agent. /// in all requests using the agent.
/// ///
/// ``` /// ```
/// // sets a header "Authorization: token secret"
/// let agent = ureq::agent() /// let agent = ureq::agent()
/// .auth_kind("token", "secret") /// .auth_kind("token", "secret")
/// .build(); /// .build();
@@ -200,9 +200,8 @@ impl Agent {
S: Into<String>, S: Into<String>,
T: Into<String>, T: Into<String>,
{ {
let s = format!("Authorization: {} {}", kind.into(), pass.into()); let value = format!("{} {}", kind.into(), pass.into());
let header = s.parse::<Header>().expect("Failed to parse header"); self.set("Authorization", value);
add_header(&mut self.headers, header);
self self
} }

View File

@@ -16,6 +16,13 @@ impl ::std::fmt::Debug for Header {
} }
impl Header { impl Header {
pub fn new(name: &str, value: &str) -> Result<Self, Error> {
let line =
AsciiString::from_str(&format!("{}: {}", name, value)).map_err(|_| Error::BadHeader)?;
let index = name.len();
Ok(Header { line, index })
}
/// The header name. /// The header name.
/// ///
/// ``` /// ```

View File

@@ -192,9 +192,10 @@ impl Request {
K: Into<String>, K: Into<String>,
V: Into<String>, V: Into<String>,
{ {
let s = format!("{}: {}", header.into(), value.into()); add_header(
let header = s.parse::<Header>().expect("Failed to parse header"); &mut self.headers,
add_header(&mut self.headers, header); Header::new(&header.into(), &value.into()).expect("Failed to parse header"),
);
self self
} }
@@ -264,9 +265,7 @@ impl Request {
I: IntoIterator<Item = (K, V)>, I: IntoIterator<Item = (K, V)>,
{ {
for (k, v) in headers.into_iter() { for (k, v) in headers.into_iter() {
let s = format!("{}: {}", k.into(), v.into()); self.set(k, v);
let header = s.parse::<Header>().expect("Failed to parse header");
add_header(&mut self.headers, header);
} }
self self
} }
@@ -424,9 +423,8 @@ impl Request {
S: Into<String>, S: Into<String>,
T: Into<String>, T: Into<String>,
{ {
let s = format!("Authorization: {} {}", kind.into(), pass.into()); let value = format!("{} {}", kind.into(), pass.into());
let header = s.parse::<Header>().expect("Failed to parse header"); self.set("Authorization", value);
add_header(&mut self.headers, header);
self self
} }

View File

@@ -204,8 +204,7 @@ fn match_cookies<'a>(jar: &'a CookieJar, domain: &str, path: &str, is_secure: bo
let name = c.name().to_string(); let name = c.name().to_string();
let value = c.value().to_string(); let value = c.value().to_string();
let nameval = Cookie::new(name, value).encoded().to_string(); let nameval = Cookie::new(name, value).encoded().to_string();
let head = format!("Cookie: {}", nameval); Header::new("Cookie", &nameval).ok()
head.parse::<Header>().ok()
}) })
.filter(|o| o.is_some()) .filter(|o| o.is_some())
.map(|o| o.unwrap()) .map(|o| o.unwrap())