Convert between HeaderValue and the declared type.

This commit is contained in:
Jimmy Cuadra 2018-05-16 01:42:53 -07:00
parent e3cf7a38a1
commit ef32a2f9c1
3 changed files with 13 additions and 6 deletions

View File

@ -20,7 +20,11 @@ impl Request {
let header_name = Ident::from(header_name_string.as_ref());
header_tokens.append_all(quote! {
headers.append(::http::header::#header_name, request.#field_name);
headers.append(
::http::header::#header_name,
::http::header::HeaderValue::from_str(request.#field_name.as_ref())
.expect("failed to convert value into HeaderValue"),
);
});
header_tokens

View File

@ -41,7 +41,10 @@ impl Response {
tokens.append_all(quote_spanned! {span=>
#field_name: headers.remove(::http::header::#header_name)
.expect("missing expected request header"),
.expect("response missing expected header")
.to_str()
.expect("failed to convert HeaderValue to str")
.to_owned(),
});
}
ResponseField::NewtypeBody(ref field) => {

View File

@ -80,8 +80,8 @@ mod api;
///
/// * `#[ruma_api(header = "HEADER_NAME")]`: Fields with this attribute will be treated as HTTP
/// headers on the request.
/// The value must implement `http::HttpTryFrom for http::header::HeaderValue`.
/// Generally this is a string.
/// The value must implement `AsRef<str>`.
/// Generally this is a `String`.
/// The attribute value shown above as `HEADER_NAME` must be a header name constant from
/// `http::header`, e.g. `CONTENT_TYPE`.
/// * `#[ruma_api(path)]`: Fields with this attribute will be inserted into the matching path
@ -101,8 +101,8 @@ mod api;
///
/// * `#[ruma_api(header = "HEADER_NAME")]`: Fields with this attribute will be treated as HTTP
/// headers on the response.
/// The value must implement `http::HttpTryFrom for http::header::HeaderValue`.
/// Generally this is a string.
/// The value must implement `AsRef<str>`.
/// Generally this is a `String`.
/// The attribute value shown above as `HEADER_NAME` must be a header name constant from
/// `http::header`, e.g. `CONTENT_TYPE`.
///