#![doc = include_str!("../README.md")]
#![no_std]
pub trait UnitExt: Sized {
#[must_use]
#[inline]
fn ret<T>(self, value: T) -> T {
value
}
#[must_use]
#[inline]
fn ret_default<T: Default>(self) -> T {
T::default()
}
#[must_use]
#[inline]
fn ret_none<T>(self) -> Option<T> {
None
}
#[must_use]
#[inline]
fn ret_some<T>(self, value: T) -> Option<T> {
value.into()
}
#[must_use]
#[inline]
fn ret_some_default<T: Default>(self) -> Option<T> {
self.ret_default::<T>().into()
}
#[must_use]
#[inline]
fn ret_err<T, E>(self, value: E) -> Result<T, E> {
Err(value)
}
#[must_use]
#[inline]
fn ret_err_default<T, E: Default>(self) -> Result<T, E> {
self.ret_err(E::default())
}
#[must_use]
#[inline]
fn ret_ok<T, E>(self, value: T) -> Result<T, E> {
Ok(value)
}
#[must_use]
#[inline]
fn ret_ok_default<T: Default, E>(self) -> Result<T, E> {
self.ret_ok(T::default())
}
}
pub trait RetExt: Sized {
#[inline]
fn discard_self(self) {
let _ = self;
}
#[inline]
fn discard_ret(self) {
self.discard_self();
}
}
impl UnitExt for () {}
impl<T> RetExt for T {}