pub struct Forwarded<'fe> {
pub elements: Vec<ForwardedElement<'fe>>,
}
Expand description
A Rust representation of the RFC 7329
Forwarded
production.
Fields§
§elements: Vec<ForwardedElement<'fe>>
Ordered vector of forwarded-element
.
Implementations§
Source§impl<'fe, 'input: 'fe> Forwarded<'fe>
impl<'fe, 'input: 'fe> Forwarded<'fe>
Sourcepub fn from_headers(
headers: &'input impl AsRef<Headers>,
) -> Result<Option<Self>, ForwardedError>
pub fn from_headers( headers: &'input impl AsRef<Headers>, ) -> Result<Option<Self>, ForwardedError>
Parse a list of Forwarded
HTTP headers into a borrowed Forwarded
instance, with
X-Forwarded-*
fallback.
§Fallback behaviour
If no Forwarded
HTTP header was set it falls back to trying to parse one of the supported
kinds of X-Forwarded-*
headers. See
from_x_forwarded_headers
for more information.
§Examples
let mut request = Request::new(Get, Url::parse("http://_/")?);
request.insert_header("X-Forwarded-For", "198.51.100.46");
request.insert_header(
"Forwarded",
r#"for=192.0.2.43, for="[2001:db8:cafe::17]", for=unknown;proto=https"#
);
let forwarded = Forwarded::from_headers(&request)?.unwrap();
//assert_eq!(forwarded.to_string(), r#"for=192.0.2.43, for="[2001:db8:cafe::17]", for=unknown;proto=https"#);
let mut request = Request::new(Get, Url::parse("http://_/")?);
request.insert_header("X-Forwarded-For", "192.0.2.43, 2001:db8:cafe::17, unknown");
let forwarded = Forwarded::from_headers(&request)?.unwrap();
assert_eq!(forwarded.to_string(), r#"for=192.0.2.43, for="[2001:db8:cafe::17]", for=unknown"#);
let mut request = Request::new(Get, Url::parse("http://_/")?);
request.insert_header("X-Forwarded-For", "192.0.2.43, 2001:db8:cafe::17, unknown");
request.insert_header("X-Forwarded-Proto", "https");
assert_eq!(
Forwarded::from_headers(&request),
Err(ForwardedError::MultipleXForwardedHeaders(vec![
"x-forwarded-for".to_string(),
"x-forwarded-proto".to_string()
])),
);
Sourcepub fn from_forwarded_header(
headers: &'input impl AsRef<Headers>,
) -> Result<Option<Self>, ForwardedError>
pub fn from_forwarded_header( headers: &'input impl AsRef<Headers>, ) -> Result<Option<Self>, ForwardedError>
Parses list of Forwarded
HTTP headers into a borrowed Forwarded
instance.
Sourcepub fn from_x_forwarded_headers(
headers: &'input impl AsRef<Headers>,
) -> Result<Option<Self>, ForwardedError>
pub fn from_x_forwarded_headers( headers: &'input impl AsRef<Headers>, ) -> Result<Option<Self>, ForwardedError>
Attempt to parse non-standard X-Forwarded-*
headers into a borrowed Forwarded
instance.
This will only attempt to do the conversion if only one kind of X-Forwarded-*
header was
specified since there is no way for us to know which order the headers were added in and at
which steps. This is in accordance with Section 7.4 of RFC 7239.
§Supported headers
X-Forwarded-By
X-Forwarded-For
X-Forwarded-Host
X-Forwarded-Proto
Sourcepub fn parse(
&mut self,
input: &'input str,
) -> Result<&'input str, ForwardedError>
pub fn parse( &mut self, input: &'input str, ) -> Result<&'input str, ForwardedError>
Parses a Forwarded
HTTP header value into a borrowed Forwarded
instance.
Sourcepub fn into_owned(self) -> Forwarded<'static>
pub fn into_owned(self) -> Forwarded<'static>
Transform a borrowed Forwarded
into an owned Forwarded
.
Trait Implementations§
Source§impl<'input> Header for Forwarded<'input>
impl<'input> Header for Forwarded<'input>
Source§fn header_name(&self) -> HeaderName
fn header_name(&self) -> HeaderName
Source§fn header_value(&self) -> HeaderValue
fn header_value(&self) -> HeaderValue
impl<'fe> Eq for Forwarded<'fe>
impl<'fe> StructuralPartialEq for Forwarded<'fe>
Auto Trait Implementations§
impl<'fe> Freeze for Forwarded<'fe>
impl<'fe> RefUnwindSafe for Forwarded<'fe>
impl<'fe> Send for Forwarded<'fe>
impl<'fe> Sync for Forwarded<'fe>
impl<'fe> Unpin for Forwarded<'fe>
impl<'fe> UnwindSafe for Forwarded<'fe>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ToHeaderValues for Twhere
T: Header,
impl<T> ToHeaderValues for Twhere
T: Header,
Source§type Iter = IntoIter<HeaderValue>
type Iter = IntoIter<HeaderValue>
Source§fn to_header_values(&self) -> Result<<T as ToHeaderValues>::Iter, Error>
fn to_header_values(&self) -> Result<<T as ToHeaderValues>::Iter, Error>
HeaderValues
.