Struct HeaderRef

Source
pub struct HeaderRef<'a, const HEADER_NAME: usize>(/* private fields */);
Expand description

typed header extractor.

on success HeaderRef will be received in handler function where it can be dereference to HeaderValue type.

on failure HeaderNotFound error would be returned which would generate a “400 BadRequest” http response.

§Example

use xitca_web::{
    handler::{
        handler_service,
        header::{self, HeaderRef}
    },
    App
};

// a handle function expecting content_type header.
async fn handle(header: HeaderRef<'_, { header::CONTENT_TYPE }>) -> &'static str {
    // dereference HeaderRef to operate on HeaderValue.
    println!("{:?}", header.to_str());
    ""
}

App::new()
    .at("/", handler_service(handle))

Methods from Deref<Target = HeaderValue>§

Source

pub fn to_str(&self) -> Result<&str, ToStrError>

Yields a &str slice if the HeaderValue only contains visible ASCII chars.

This function will perform a scan of the header value, checking all the characters.

§Examples
let val = HeaderValue::from_static("hello");
assert_eq!(val.to_str().unwrap(), "hello");
Source

pub fn len(&self) -> usize

Returns the length of self.

This length is in bytes.

§Examples
let val = HeaderValue::from_static("hello");
assert_eq!(val.len(), 5);
Source

pub fn is_empty(&self) -> bool

Returns true if the HeaderValue has a length of zero bytes.

§Examples
let val = HeaderValue::from_static("");
assert!(val.is_empty());

let val = HeaderValue::from_static("hello");
assert!(!val.is_empty());
Source

pub fn as_bytes(&self) -> &[u8]

Converts a HeaderValue to a byte slice.

§Examples
let val = HeaderValue::from_static("hello");
assert_eq!(val.as_bytes(), b"hello");
Source

pub fn is_sensitive(&self) -> bool

Returns true if the value represents sensitive data.

Sensitive data could represent passwords or other data that should not be stored on disk or in memory. By marking header values as sensitive, components using this crate can be instructed to treat them with special care for security reasons. For example, caches can avoid storing sensitive values, and HPACK encoders used by HTTP/2.0 implementations can choose not to compress them.

Additionally, sensitive values will be masked by the Debug implementation of HeaderValue.

Note that sensitivity is not factored into equality or ordering.

§Examples
let mut val = HeaderValue::from_static("my secret");

val.set_sensitive(true);
assert!(val.is_sensitive());

val.set_sensitive(false);
assert!(!val.is_sensitive());

Trait Implementations§

Source§

impl<const HEADER_NAME: usize> Debug for HeaderRef<'_, HEADER_NAME>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const HEADER_NAME: usize> Deref for HeaderRef<'_, HEADER_NAME>

Source§

type Target = HeaderValue

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<'a, 'r, C, B, const HEADER_NAME: usize> FromRequest<'a, WebContext<'r, C, B>> for HeaderRef<'a, HEADER_NAME>

Source§

type Type<'b> = HeaderRef<'b, HEADER_NAME>

Source§

type Error = Error

Source§

async fn from_request( ctx: &'a WebContext<'r, C, B>, ) -> Result<Self, Self::Error>

Auto Trait Implementations§

§

impl<'a, const HEADER_NAME: usize> Freeze for HeaderRef<'a, HEADER_NAME>

§

impl<'a, const HEADER_NAME: usize> RefUnwindSafe for HeaderRef<'a, HEADER_NAME>

§

impl<'a, const HEADER_NAME: usize> Send for HeaderRef<'a, HEADER_NAME>

§

impl<'a, const HEADER_NAME: usize> Sync for HeaderRef<'a, HEADER_NAME>

§

impl<'a, const HEADER_NAME: usize> Unpin for HeaderRef<'a, HEADER_NAME>

§

impl<'a, const HEADER_NAME: usize> UnwindSafe for HeaderRef<'a, HEADER_NAME>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> BorrowState<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more