actix_http/header/
as_name.rs1use std::{borrow::Cow, str::FromStr as _};
4
5use http::header::{HeaderName, InvalidHeaderName};
6
7pub trait AsHeaderName: Sealed {}
11
12pub struct Seal;
13
14pub trait Sealed {
15 fn try_as_name(&self, seal: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName>;
16}
17
18impl Sealed for HeaderName {
19 #[inline]
20 fn try_as_name(&self, _: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName> {
21 Ok(Cow::Borrowed(self))
22 }
23}
24impl AsHeaderName for HeaderName {}
25
26impl Sealed for &HeaderName {
27 #[inline]
28 fn try_as_name(&self, _: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName> {
29 Ok(Cow::Borrowed(*self))
30 }
31}
32impl AsHeaderName for &HeaderName {}
33
34impl Sealed for &str {
35 #[inline]
36 fn try_as_name(&self, _: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName> {
37 HeaderName::from_str(self).map(Cow::Owned)
38 }
39}
40impl AsHeaderName for &str {}
41
42impl Sealed for String {
43 #[inline]
44 fn try_as_name(&self, _: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName> {
45 HeaderName::from_str(self).map(Cow::Owned)
46 }
47}
48impl AsHeaderName for String {}
49
50impl Sealed for &String {
51 #[inline]
52 fn try_as_name(&self, _: Seal) -> Result<Cow<'_, HeaderName>, InvalidHeaderName> {
53 HeaderName::from_str(self).map(Cow::Owned)
54 }
55}
56impl AsHeaderName for &String {}