@@ -1,10 +1,11 @@
|
|||||||
mod expected;
|
mod expected;
|
||||||
|
mod tried;
|
||||||
|
|
||||||
use std::{cmp, convert::TryFrom};
|
use std::{cmp, convert::TryFrom};
|
||||||
|
|
||||||
pub use checked_ops::checked_ops;
|
pub use checked_ops::checked_ops;
|
||||||
|
|
||||||
pub use self::expected::Expected;
|
pub use self::{expected::Expected, tried::Tried};
|
||||||
use crate::{debug::type_name, err, Err, Error, Result};
|
use crate::{debug::type_name, err, Err, Error, Result};
|
||||||
|
|
||||||
/// Checked arithmetic expression. Returns a Result<R, Error::Arithmetic>
|
/// Checked arithmetic expression. Returns a Result<R, Error::Arithmetic>
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
use num_traits::ops::checked::{CheckedAdd, CheckedDiv, CheckedMul, CheckedRem, CheckedSub};
|
||||||
|
|
||||||
|
use crate::{checked, Result};
|
||||||
|
|
||||||
|
pub trait Tried {
|
||||||
|
#[inline]
|
||||||
|
fn try_add(self, rhs: Self) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: CheckedAdd + Sized,
|
||||||
|
{
|
||||||
|
checked!(self + rhs)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_sub(self, rhs: Self) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: CheckedSub + Sized,
|
||||||
|
{
|
||||||
|
checked!(self - rhs)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_mul(self, rhs: Self) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: CheckedMul + Sized,
|
||||||
|
{
|
||||||
|
checked!(self * rhs)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_div(self, rhs: Self) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: CheckedDiv + Sized,
|
||||||
|
{
|
||||||
|
checked!(self / rhs)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn try_rem(self, rhs: Self) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: CheckedRem + Sized,
|
||||||
|
{
|
||||||
|
checked!(self % rhs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Tried for T {}
|
||||||
Reference in New Issue
Block a user