//! generator: pin
//! hash:
//! index: sized
+//! infallible:
//! iterator: option
//! iterators: iterator, fn
//! option:
//! result:
//! sized:
//! slice:
-//! try:
+//! try: infallible
//! unsize: sized
pub mod marker {
fn as_ref(&self) -> &T;
}
// endregion:as_ref
+ // region:infallible
+ pub enum Infallible {}
+ // endregion:infallible
}
pub mod ops {
Continue(C),
Break(B),
}
- pub trait FromResidual<R = Self::Residual> {
+ pub trait FromResidual<R = <Self as Try>::Residual> {
#[lang = "from_residual"]
fn from_residual(residual: R) -> Self;
}
impl<B, C> Try for ControlFlow<B, C> {
type Output = C;
- type Residual = ControlFlow<B, convert::Infallible>;
+ type Residual = ControlFlow<B, crate::convert::Infallible>;
fn from_output(output: Self::Output) -> Self {}
fn branch(self) -> ControlFlow<Self::Residual, Self::Output> {}
}
impl<B, C> FromResidual for ControlFlow<B, C> {
- fn from_residual(residual: ControlFlow<B, convert::Infallible>) -> Self {}
+ fn from_residual(residual: ControlFlow<B, crate::convert::Infallible>) -> Self {}
}
}
pub use self::try_::{ControlFlow, FromResidual, Try};
}
}
}
+ // region:try
+ impl<T> crate::ops::Try for Option<T> {
+ type Output = T;
+ type Residual = Option<crate::convert::Infallible>;
+
+ #[inline]
+ fn from_output(output: Self::Output) -> Self {
+ Some(output)
+ }
+
+ #[inline]
+ fn branch(self) -> crate::ops::ControlFlow<Self::Residual, Self::Output> {
+ match self {
+ Some(v) => crate::ops::ControlFlow::Continue(v),
+ None => crate::ops::ControlFlow::Break(None),
+ }
+ }
+ }
+ impl<T> crate::ops::FromResidual for Option<T> {
+ #[inline]
+ fn from_residual(residual: Option<crate::convert::Infallible>) -> Self {
+ match residual {
+ None => None,
+ }
+ }
+ }
+ // endregion:try
}
// endregion:option