Skip to main content

sark_core/http/response/
header_name.rs

1use http::HeaderName;
2
3pub trait HeaderNameRef: sealed::SealedHeaderNameRef {
4    fn as_header_name(&self) -> &str;
5}
6
7impl HeaderNameRef for HeaderName {
8    fn as_header_name(&self) -> &str {
9        self.as_str()
10    }
11}
12
13impl HeaderNameRef for &HeaderName {
14    fn as_header_name(&self) -> &str {
15        self.as_str()
16    }
17}
18
19impl HeaderNameRef for str {
20    fn as_header_name(&self) -> &str {
21        self
22    }
23}
24
25impl HeaderNameRef for &str {
26    fn as_header_name(&self) -> &str {
27        self
28    }
29}
30
31impl HeaderNameRef for String {
32    fn as_header_name(&self) -> &str {
33        self.as_str()
34    }
35}
36
37pub trait IntoHeaderName: sealed::SealedIntoHeaderName {
38    fn into_header_name(self) -> HeaderName;
39}
40
41impl IntoHeaderName for HeaderName {
42    fn into_header_name(self) -> HeaderName {
43        self
44    }
45}
46
47impl IntoHeaderName for &HeaderName {
48    fn into_header_name(self) -> HeaderName {
49        self.clone()
50    }
51}
52
53impl IntoHeaderName for &str {
54    fn into_header_name(self) -> HeaderName {
55        HeaderName::from_bytes(self.as_bytes()).expect("invalid header name")
56    }
57}
58
59impl IntoHeaderName for String {
60    fn into_header_name(self) -> HeaderName {
61        HeaderName::from_bytes(self.as_bytes()).expect("invalid header name")
62    }
63}
64
65mod sealed {
66    pub trait SealedHeaderNameRef {}
67    pub trait SealedIntoHeaderName {}
68
69    impl SealedHeaderNameRef for http::HeaderName {}
70    impl SealedHeaderNameRef for &http::HeaderName {}
71    impl SealedHeaderNameRef for str {}
72    impl SealedHeaderNameRef for &str {}
73    impl SealedHeaderNameRef for String {}
74
75    impl SealedIntoHeaderName for http::HeaderName {}
76    impl SealedIntoHeaderName for &http::HeaderName {}
77    impl SealedIntoHeaderName for &str {}
78    impl SealedIntoHeaderName for String {}
79}