use crate::{Debug, Own, is};
impl<S, V, E> Own<S, Result<V, E>> {
pub fn v_map_ok<W, F: FnOnce(V) -> W>(self, op: F) -> Own<S, Result<W, E>> {
Own::new(self.s, self.v.map(op))
}
pub fn v_map_err<F, O: FnOnce(E) -> F>(self, op: O) -> Own<S, Result<V, F>> {
Own::new(self.s, self.v.map_err(op))
}
pub fn v_and<W>(self, res: Result<W, E>) -> Own<S, Result<W, E>> {
Own::new(self.s, self.v.and(res))
}
pub fn v_and_then<W, F: FnOnce(V) -> Result<W, E>>(self, op: F) -> Own<S, Result<W, E>> {
Own::new(self.s, self.v.and_then(op))
}
pub const fn v_assert_ok(self) -> Self {
is![let Ok(_) = self.v, self, panic![]]
}
pub const fn v_assert_ok_or(self, message: &'static str) -> Self {
is![let Ok(_) = self.v, self, panic!["{}", message]]
}
pub const fn v_assert_err(self) -> Self {
is![let Err(_) = self.v, self, panic![]]
}
pub const fn v_assert_err_or(self, message: &'static str) -> Self {
is![let Err(_) = self.v, self, panic!["{}", message]]
}
pub fn v_unwrap(self) -> Own<S, V> {
is![let Ok(v) = self.v, Own::new(self.s, v), panic![]]
}
pub fn v_unwrap_or(self, default: V) -> Own<S, V> {
Own::new(self.s, self.v.unwrap_or(default))
}
#[rustfmt::skip]
pub fn v_expect(self, message: &str) -> Own<S, V> where E: Debug {
Own::new(self.s, self.v.expect(message))
}
}
impl<S: Copy, V: Copy, E: Copy> Own<S, Result<V, E>> {
pub const fn v_const_unwrap(self) -> Own<S, V> {
is![let Ok(v) = self.v, Own::new(self.s, v), panic![]]
}
pub const fn v_const_unwrap_or(self, default: V) -> Own<S, V> {
is![let Ok(v) = self.v, Own::new(self.s, v), Own::new(self.s, default)]
}
pub const fn v_const_expect_const(self, message: &'static str) -> Own<S, V> {
is![let Ok(v) = self.v, Own::new(self.s, v), panic!["{}", message]]
}
}
impl<S, V> Own<S, Option<V>> {
pub fn v_map_some<W, F: FnOnce(V) -> W>(self, op: F) -> Own<S, Option<W>> {
Own::new(self.s, self.v.map(op))
}
pub fn v_and<W>(self, optb: Option<W>) -> Own<S, Option<W>> {
Own::new(self.s, self.v.and(optb))
}
pub fn v_and_then<W, F: FnOnce(V) -> Option<W>>(self, op: F) -> Own<S, Option<W>> {
Own::new(self.s, self.v.and_then(op))
}
pub const fn v_assert_some(self) -> Self {
is![let Some(_) = self.v, self, panic![]]
}
pub const fn v_assert_some_or(self, message: &'static str) -> Self {
is![let Some(_) = self.v, self, panic!["{}", message]]
}
pub const fn v_assert_none(self) -> Self {
is![let None = self.v, self, panic![]]
}
pub const fn v_assert_none_or(self, message: &'static str) -> Self {
is![let None = self.v, self, panic!["{}", message]]
}
pub fn v_unwrap(self) -> Own<S, V> {
Own::new(self.s, self.v.unwrap())
}
pub fn v_unwrap_or(self, default: V) -> Own<S, V> {
Own::new(self.s, self.v.unwrap_or(default))
}
pub fn v_expect(self, message: &str) -> Own<S, V> {
Own::new(self.s, self.v.expect(message))
}
}
impl<S: Copy, V: Copy> Own<S, Option<V>> {
pub const fn v_const_unwrap(self) -> Own<S, V> {
is![let Some(v) = self.v, Own::new(self.s, v), panic![]]
}
pub const fn v_const_unwrap_or(self, default: V) -> Own<S, V> {
is![let Some(v) = self.v, Own::new(self.s, v), Own::new(self.s, default)]
}
pub const fn v_const_expect(self, message: &'static str) -> Own<S, V> {
is![let Some(v) = self.v, Own::new(self.s, v), panic!["{}", message]]
}
}