http_serde_ext/
header_value.rs1use 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);