use std::fmt;
use crate::effect::{Effects, Resumes};
pub enum Control<R> {
Resume(R),
Cancel,
}
impl<R> Control<R> {
#[inline]
pub fn resume(r: R) -> Self {
Self::Resume(r)
}
#[inline]
pub fn cancel() -> Self {
Self::Cancel
}
}
impl<R> From<R> for Control<R> {
#[inline]
fn from(r: R) -> Self {
Control::Resume(r)
}
}
#[doc(hidden)]
pub enum CoControl<'a, Effs>
where
Effs: Effects<'a>,
{
Cancel,
Resume(Resumes<'a, Effs>),
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct Cancelled;
impl fmt::Display for Cancelled {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("computation was cancelled")
}
}
impl std::error::Error for Cancelled {}