carapax 0.38.0

A Telegram Bot Framework
Documentation
use std::time::Duration;

use super::*;

#[tokio::test]
async fn direct() {
    let handler = DirectRateLimitPredicate::discard(Quota::per_minute(nonzero!(1u32)));
    assert!(
        matches!(handler.handle(()).await, PredicateResult::True),
        "[direct/discard/1] true"
    );
    assert!(
        matches!(handler.handle(()).await, PredicateResult::False),
        "[direct/discard/2] false"
    );

    let handler = DirectRateLimitPredicate::wait(
        Quota::with_period(Duration::from_millis(100))
            .unwrap()
            .allow_burst(nonzero!(1u32)),
    );
    assert!(
        matches!(handler.handle(()).await, PredicateResult::True),
        "[direct/wait/1] continue"
    );
    assert!(
        matches!(handler.handle(()).await, PredicateResult::True),
        "[direct/wait/2] continue"
    );

    let handler = DirectRateLimitPredicate::wait_with_jitter(
        Quota::with_period(Duration::from_millis(100))
            .unwrap()
            .allow_burst(nonzero!(1u32)),
        Jitter::new(Duration::from_secs(0), Duration::from_millis(100)),
    );
    assert!(
        matches!(handler.handle(()).await, PredicateResult::True),
        "[direct/wait_with_jitter/1] continue"
    );
    assert!(
        matches!(handler.handle(()).await, PredicateResult::True),
        "[direct/wait_with_jitter/2] continue"
    );
}