actix_http/header/
into_value.rs

1//! [`TryIntoHeaderValue`] trait and implementations.
2
3use bytes::Bytes;
4use http::{header::InvalidHeaderValue, Error as HttpError, HeaderValue};
5use mime::Mime;
6
7/// An interface for types that can be converted into a [`HeaderValue`].
8pub trait TryIntoHeaderValue: Sized {
9    /// The type returned in the event of a conversion error.
10    type Error: Into<HttpError>;
11
12    /// Try to convert value to a HeaderValue.
13    fn try_into_value(self) -> Result<HeaderValue, Self::Error>;
14}
15
16impl TryIntoHeaderValue for HeaderValue {
17    type Error = InvalidHeaderValue;
18
19    #[inline]
20    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
21        Ok(self)
22    }
23}
24
25impl TryIntoHeaderValue for &HeaderValue {
26    type Error = InvalidHeaderValue;
27
28    #[inline]
29    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
30        Ok(self.clone())
31    }
32}
33
34impl TryIntoHeaderValue for &str {
35    type Error = InvalidHeaderValue;
36
37    #[inline]
38    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
39        self.parse()
40    }
41}
42
43impl TryIntoHeaderValue for &[u8] {
44    type Error = InvalidHeaderValue;
45
46    #[inline]
47    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
48        HeaderValue::from_bytes(self)
49    }
50}
51
52impl TryIntoHeaderValue for Bytes {
53    type Error = InvalidHeaderValue;
54
55    #[inline]
56    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
57        HeaderValue::from_maybe_shared(self)
58    }
59}
60
61impl TryIntoHeaderValue for Vec<u8> {
62    type Error = InvalidHeaderValue;
63
64    #[inline]
65    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
66        HeaderValue::try_from(self)
67    }
68}
69
70impl TryIntoHeaderValue for String {
71    type Error = InvalidHeaderValue;
72
73    #[inline]
74    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
75        HeaderValue::try_from(self)
76    }
77}
78
79impl TryIntoHeaderValue for usize {
80    type Error = InvalidHeaderValue;
81
82    #[inline]
83    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
84        HeaderValue::try_from(self.to_string())
85    }
86}
87
88impl TryIntoHeaderValue for i64 {
89    type Error = InvalidHeaderValue;
90
91    #[inline]
92    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
93        HeaderValue::try_from(self.to_string())
94    }
95}
96
97impl TryIntoHeaderValue for u64 {
98    type Error = InvalidHeaderValue;
99
100    #[inline]
101    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
102        HeaderValue::try_from(self.to_string())
103    }
104}
105
106impl TryIntoHeaderValue for i32 {
107    type Error = InvalidHeaderValue;
108
109    #[inline]
110    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
111        HeaderValue::try_from(self.to_string())
112    }
113}
114
115impl TryIntoHeaderValue for u32 {
116    type Error = InvalidHeaderValue;
117
118    #[inline]
119    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
120        HeaderValue::try_from(self.to_string())
121    }
122}
123
124impl TryIntoHeaderValue for Mime {
125    type Error = InvalidHeaderValue;
126
127    #[inline]
128    fn try_into_value(self) -> Result<HeaderValue, Self::Error> {
129        HeaderValue::from_str(self.as_ref())
130    }
131}