[][src]Module roa::header

The header module of roa. This module provides a Request/Response extension FriendlyHeaders.

When should we use it?

You can straightly use raw http::header::HeaderMap in roa, but you have to transfer value type between HeaderValue and string then deal with other errors(not roa::Error) by yourself.

use roa::{Context, Result, Error};
use roa::http::header::{ORIGIN, CONTENT_TYPE};
use roa::http::StatusCode;

async fn get(mut ctx: Context<()>) -> Result {
    if let Some(value) = ctx.req().headers.get(ORIGIN) {
        // handle `ToStrError`
        let origin = value.to_str().map_err(|_err| Error::new(StatusCode::BAD_REQUEST, "", true))?;
        println!("origin: {}", origin);
    }
    // handle `InvalidHeaderValue`
    ctx.resp_mut()
       .headers
       .insert(
           CONTENT_TYPE,
           "text/plain".parse().map_err(|_err| Error::new(StatusCode::BAD_REQUEST, "", true))?
       );
    Ok(())
}

Dealing with errors is necessary but sometimes can be annoying

If you are finding some simpler methods to deal with header value, FriendlyHeaders is suit for you.

use roa::{Context, Result};
use roa::http::header::{ORIGIN, CONTENT_TYPE};
use roa::http::StatusCode;
use roa::header::FriendlyHeaders;

async fn get(mut ctx: Context<()>) -> Result {
    println!("origin: {}", ctx.req().must_get(ORIGIN)?);
    ctx.resp_mut()
       .insert(CONTENT_TYPE, "text/plain")?;
    Ok(())
}

Traits

FriendlyHeaders

A Request/Response extension.