camber 0.1.1

Opinionated async Rust for IO-bound services on top of Tokio
Documentation
use camber::RuntimeError;

#[test]
fn channel_send_after_receiver_drop_returns_error() {
    let (tx, rx) = camber::channel::new::<i32>();
    drop(rx);
    let result = tx.send(42);
    assert!(result.is_err());
    match result.unwrap_err() {
        RuntimeError::ChannelClosed => {}
        other => panic!("expected ChannelClosed, got: {other}"),
    }
}

#[test]
fn run_returns_error_on_invalid_config() {
    let result = camber::runtime::builder()
        .worker_threads(0)
        .run(|| "should not reach here");

    match result {
        Err(RuntimeError::InvalidArgument(msg)) => {
            assert!(
                msg.contains("worker_threads"),
                "error should mention worker_threads, got: {msg}"
            );
        }
        Ok(_) => panic!("expected Err, got Ok"),
        Err(other) => panic!("expected InvalidArgument, got: {other}"),
    }
}