use std::future::Future;
use tokio_util::sync::CancellationToken;
use crate::core::{Result, ResumaError};
pub fn new_scope() -> CancellationToken {
CancellationToken::new()
}
pub async fn run_cancellable<T, F>(token: &CancellationToken, fut: F) -> Result<T>
where
F: Future<Output = Result<T>>,
{
tokio::select! {
result = fut => result,
() = token.cancelled() => Err(ResumaError::Cancelled),
}
}
pub fn check(token: &CancellationToken) -> Result<()> {
if token.is_cancelled() {
Err(ResumaError::Cancelled)
} else {
Ok(())
}
}