http_types_2/headers/
header.rs1
2use crate::headers::{HeaderName, HeaderValue, Headers};
3
4pub trait Header {
6 fn header_name(&self) -> HeaderName;
8
9 fn header_value(&self) -> HeaderValue;
11
12 fn apply_header<H: AsMut<Headers>>(&self, mut headers: H) {
15 let name = self.header_name();
16 let value = self.header_value();
17
18 headers.as_mut().insert(name, value).unwrap();
21 }
22}
23
24impl Header for (&str, &str) {
25 fn header_name(&self) -> HeaderName {
26 HeaderName::from(self.0)
27 }
28
29 fn header_value(&self) -> HeaderValue {
30 HeaderValue::from_bytes(self.1.to_owned().into_bytes())
31 .expect("String slice should be valid ASCII")
32 }
33}
34
35impl<T: Header> Header for &T {
36 fn header_name(&self) -> HeaderName {
37 (**self).header_name()
38 }
39
40 fn header_value(&self) -> HeaderValue {
41 (**self).header_value()
42 }
43}
44
45#[cfg(test)]
46mod test {
47 use super::*;
48
49 #[test]
50 fn header_from_strings() {
51 let strings = ("Content-Length", "12");
52 assert_eq!(strings.header_name(), "Content-Length");
53 assert_eq!(strings.header_value(), "12");
54 }
55}