http_serde_ext/
header_value.rs

1use serde::{ser, Deserializer, Serializer};
2
3type Type = http::HeaderValue;
4const EXPECT_MESSAGE: &str = "a header value";
5
6pub fn serialize<S: Serializer>(val: &Type, ser: S) -> Result<S::Ok, S::Error> {
7    if ser.is_human_readable() {
8        use ser::Error;
9        ser.serialize_str(val.to_str().map_err(Error::custom)?)
10    } else {
11        ser.serialize_bytes(val.as_ref())
12    }
13}
14
15create_visitor!(
16    Visitor,
17    Type,
18    EXPECT_MESSAGE,
19    (visit_str, &str),
20    (visit_string, String),
21    (visit_bytes, &[u8]),
22    (visit_byte_buf, Vec<u8>)
23);
24
25pub fn deserialize<'de, D>(de: D) -> Result<Type, D::Error>
26where
27    D: Deserializer<'de>,
28{
29    if de.is_human_readable() {
30        de.deserialize_string(Visitor)
31    } else {
32        de.deserialize_byte_buf(Visitor)
33    }
34}
35
36derive_extension_types!(super::Type);
37derive_hash_types!(super::Type);
38derive_ord_types!(super::Type);