acceptor-alloc 0.0.1

alloc-based acceptors built on the accepts core traits
Documentation
use std::collections::BTreeMap;

use accepts::{Accepts, AsyncAccepts};

use crate::{
    BTreeKVRouter,
    support::{Recorder, block_on},
};

#[test]
fn routes_to_matching_entry() {
    let recorder_a: Recorder<(char, i32)> = Recorder::default();
    let recorder_b: Recorder<(char, i32)> = Recorder::default();
    let fallback: Recorder<(char, i32)> = Recorder::default();

    let mut routes = BTreeMap::new();
    routes.insert('a', recorder_a.clone());
    routes.insert('b', recorder_b.clone());

    let router = BTreeKVRouter::with_fallback(routes, fallback.clone());

    router.accept(('a', 1));
    router.accept(('b', 2));
    router.accept(('c', 3));

    assert_eq!(recorder_a.take(), vec![('a', 1)]);
    assert_eq!(recorder_b.take(), vec![('b', 2)]);
    assert_eq!(fallback.take(), vec![('c', 3)]);
}

#[test]
fn routes_to_fallback_when_route_missing() {
    let fallback: Recorder<(char, u8)> = Recorder::default();
    let routes: BTreeMap<char, Recorder<(char, u8)>> = BTreeMap::new();

    let router = BTreeKVRouter::with_fallback(routes, fallback.clone());

    router.accept(('x', 9));

    assert_eq!(fallback.take(), vec![('x', 9)]);
}

#[test]
fn async_routing_works() {
    let recorder_a: Recorder<(u32, &'static str)> = Recorder::default();
    let fallback: Recorder<(u32, &'static str)> = Recorder::default();

    let mut routes = BTreeMap::new();
    routes.insert(1_u32, recorder_a.clone());

    let router = BTreeKVRouter::with_fallback(routes, fallback.clone());

    block_on(router.accept_async((1, "hit")));
    block_on(router.accept_async((2, "miss")));

    assert_eq!(recorder_a.take(), vec![(1, "hit")]);
    assert_eq!(fallback.take(), vec![(2, "miss")]);
}