cranpose-core 0.9.21

Composition runtime and reactive state for Cranpose
Documentation
use cranpose_core::withBlocking;

#[derive(Debug)]
pub enum Failure {
    Saturated,
    Other,
}

pub async fn run(work: impl FnOnce() -> u64 + Send + 'static) -> Result<u64, Failure> {
    withBlocking(work).await.map_err(|error| match error {
        cranpose_core::BlockingError::Saturated => Failure::Saturated,
        _ => Failure::Other,
    })
}

pub fn serial(iterations: u64) -> u64 {
    (0..iterations).fold(0_u64, |sum, value| {
        sum.wrapping_add(
            pollster::block_on(run(move || std::hint::black_box(value))).expect("serial job"),
        )
    })
}