[][src]Trait roa::cookie::CookieGetter

pub trait CookieGetter {
    fn must_cookie(&mut self, name: &str) -> Result<Arc<Cookie<'static>>>;
fn cookie(&self, name: &str) -> Option<Arc<Cookie<'static>>>; }

A context extension. This extension must be used in downstream of middleware cookier_parser, otherwise you cannot get expected cookie.

Example

use roa::cookie::cookie_parser;
use roa::App;
use roa::preload::*;
use roa::http::{StatusCode, header::COOKIE};
use async_std::task::spawn;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // downstream of `cookie_parser`
    let (addr, server) = App::new(())
        .gate(cookie_parser)
        .end( |mut ctx| async move {
            assert_eq!("Hexilee", ctx.must_cookie("name")?.value());
            Ok(())
        })
        .run()?;
    spawn(server);
    let client = reqwest::Client::new();
    let resp = client
        .get(&format!("http://{}", addr))
        .header(COOKIE, "name=Hexilee")
        .send()
        .await?;
    assert_eq!(StatusCode::OK, resp.status());

    // miss `cookie_parser`
    let (addr, server) = App::new(())
        .end( |ctx| async move {
            assert!(ctx.cookie("name").is_none());
            Ok(())
        })
        .run()?;
    spawn(server);
    let resp = client
        .get(&format!("http://{}", addr))
        .header(COOKIE, "name=Hexilee")
        .send()
        .await?;
    assert_eq!(StatusCode::OK, resp.status());
    Ok(())
}

Required methods

Must get a cookie, throw 401 UNAUTHORIZED if it not exists.

Example

use roa::cookie::cookie_parser;
use roa::App;
use roa::preload::*;
use roa::http::{StatusCode, header::COOKIE};
use async_std::task::spawn;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // downstream of `cookie_parser`
    let (addr, server) = App::new(())
        .gate(cookie_parser)
        .end( |mut ctx| async move {
            assert_eq!("Hexilee", ctx.must_cookie("name")?.value());
            Ok(())
        })
        .run()?;
    spawn(server);
    let resp = reqwest::get(&format!("http://{}", addr)).await?;
    assert_eq!(StatusCode::UNAUTHORIZED, resp.status());
    Ok(())
}

fn cookie(&self, name: &str) -> Option<Arc<Cookie<'static>>>

Try to get a cookie, return None if it not exists.

Example

use roa::cookie::cookie_parser;
use roa::App;
use roa::preload::*;
use roa::http::{StatusCode, header::COOKIE};
use async_std::task::spawn;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // downstream of `cookie_parser`
    let (addr, server) = App::new(())
        .gate(cookie_parser)
        .end( |ctx| async move {
            assert!(ctx.cookie("name").is_none());
            Ok(())
        })
        .run()?;
    spawn(server);
    let resp = reqwest::get(&format!("http://{}", addr)).await?;
    assert_eq!(StatusCode::OK, resp.status());
    Ok(())
}
Loading content...

Implementors

impl<S> CookieGetter for SyncContext<S>[src]

Loading content...