[][src]Trait roa::query::Query

pub trait Query {
    fn must_query<'a>(&self, name: &'a str) -> Result<Variable<'a, String>>;
fn query<'a>(&self, name: &'a str) -> Option<Variable<'a, String>>; }

A context extension. This extension must be used in downstream of middleware query_parser, otherwise you cannot get expected query variable.

Example

use roa::query::query_parser;
use roa::{App, Context};
use roa::http::StatusCode;
use roa::preload::*;
use async_std::task::spawn;

async fn must(ctx: &mut Context) -> roa::Result {
    assert_eq!("Hexilee", &*ctx.must_query("name")?);
    Ok(())
}

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

    // miss `query_parser`
    let app = App::new().end(must);
    let (addr, server) = app.run()?;
    spawn(server);
    let resp = reqwest::get(&format!("http://{}?name=Hexilee", addr)).await?;
    assert_eq!(StatusCode::BAD_REQUEST, resp.status());
    Ok(())
}

Required methods

fn must_query<'a>(&self, name: &'a str) -> Result<Variable<'a, String>>

Must get a variable, throw 400 BAD_REQUEST if it not exists.

Example

use roa::query::query_parser;
use roa::{App, Context};
use roa::http::StatusCode;
use roa::preload::*;
use async_std::task::spawn;

async fn must(ctx: &mut Context) -> roa::Result {
    assert_eq!("Hexilee", &*ctx.must_query("name")?);
    Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // downstream of `query_parser`
    let app = App::new()
        .gate(query_parser)
        .end(must);
    let (addr, server) = app.run()?;
    spawn(server);
    let resp = reqwest::get(&format!("http://{}", addr)).await?;
    assert_eq!(StatusCode::BAD_REQUEST, resp.status());
    Ok(())
}

fn query<'a>(&self, name: &'a str) -> Option<Variable<'a, String>>

Query a variable, return None if it not exists.

Example

use roa::query::query_parser;
use roa::{App, Context};
use roa::http::StatusCode;
use roa::preload::*;
use async_std::task::spawn;

async fn test(ctx: &mut Context) -> roa::Result {
    assert!(ctx.query("name").is_none());
    Ok(())
}

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

Implementors

impl<S> Query for Context<S>[src]

Loading content...