acceptor 0.0.1

no_std bundle of thin acceptors built on the accepts core traits
Documentation
use core::future::Ready;

use accepts::{Accepts, AsyncAccepts};

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

use super::{AsyncRouter, AsyncRouterEntry, Router, RouterEntry};

#[test]
fn routes_to_matching_entries_in_order() {
    let even_rec = Recorder::new();
    let gt_two_rec = Recorder::new();

    fn is_even(v: &u32) -> bool {
        *v % 2 == 0
    }

    fn greater_than_two(v: &u32) -> bool {
        *v > 2
    }

    let table = Router::new(vec![
        RouterEntry::new(is_even as fn(&u32) -> bool, even_rec.clone()),
        RouterEntry::new(greater_than_two as fn(&u32) -> bool, gt_two_rec.clone()),
    ]);

    table.accept(1);
    table.accept(4);
    table.accept(2);

    assert_eq!(even_rec.take(), vec![4, 2]);
    assert_eq!(gt_two_rec.take(), vec![4]);
}

#[test]
fn routes_to_matching_entries_in_order_async() {
    let even_rec = Recorder::new();
    let gt_two_rec = Recorder::new();

    fn is_even(v: &u32) -> Ready<bool> {
        core::future::ready(*v % 2 == 0)
    }

    fn greater_than_two(v: &u32) -> Ready<bool> {
        core::future::ready(*v > 2)
    }

    let table = AsyncRouter::new(vec![
        AsyncRouterEntry::new(is_even as fn(&u32) -> Ready<bool>, even_rec.clone()),
        AsyncRouterEntry::new(
            greater_than_two as fn(&u32) -> Ready<bool>,
            gt_two_rec.clone(),
        ),
    ]);

    block_on(table.accept_async(1));
    block_on(table.accept_async(4));
    block_on(table.accept_async(2));

    assert_eq!(even_rec.take(), vec![4, 2]);
    assert_eq!(gt_two_rec.take(), vec![4]);
}