finchers 0.13.5

A combinator library for builidng asynchronous HTTP services
Documentation
use finchers::endpoint::syntax;
use finchers::error::bad_request;
use finchers::prelude::*;
use finchers::test;

#[test]
fn test_or_1() {
    let mut runner = test::runner({
        let e1 = syntax::segment("foo").and(endpoint::cloned("foo"));
        let e2 = syntax::segment("bar").and(endpoint::cloned("bar"));
        e1.or(e2)
    });

    assert_matches!(runner.apply("/foo"), Ok(..));

    assert_matches!(runner.apply("/bar"), Ok(..));
}

#[test]
fn test_or_choose_longer_segments() {
    let mut runner = test::runner({
        let e1 = syntax::segment("foo").and(endpoint::cloned("foo"));
        let e2 = syntax::segment("foo")
            .and("bar")
            .and(endpoint::cloned("foobar"));
        e1.or(e2)
    });

    assert_matches!(runner.apply("/foo"), Ok(..));
    assert_matches!(runner.apply("/foo/bar"), Ok(..));
}

#[test]
fn test_or_with_rejection() {
    let mut runner = test::runner({
        syntax::segment("foo")
            .or(syntax::segment("bar"))
            .wrap(endpoint::wrapper::or_reject_with(|_err, _cx| {
                bad_request(format_err!("custom rejection"))
            }))
    });

    assert_matches!(runner.apply("/foo"), Ok(..));

    assert_matches!(
        runner.apply("/baz"),
        Err(ref e) if e.to_string() == "custom rejection"
    );
}