use std::ops::ControlFlow;
#[repr(usize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Flow {
Continue,
Break,
}
impl Flow {
#[must_use]
pub const fn is_continue(&self) -> bool {
matches!(self, Self::Continue)
}
#[must_use]
pub const fn is_break(&self) -> bool {
matches!(self, Self::Break)
}
pub const fn into_control_flow(self) -> ControlFlow<()> {
match self {
Self::Continue => ControlFlow::Continue(()),
Self::Break => ControlFlow::Break(()),
}
}
}
impl<C, B> From<ControlFlow<C, B>> for Flow {
fn from(flow: ControlFlow<C, B>) -> Self {
match flow {
ControlFlow::Continue(_) => Self::Continue,
ControlFlow::Break(_) => Self::Break,
}
}
}
impl From<Flow> for ControlFlow<()> {
fn from(flow: Flow) -> Self {
match flow {
Flow::Continue => Self::Continue(()),
Flow::Break => Self::Break(()),
}
}
}