diff --git a/src/lib.rs b/src/lib.rs index d392e920..fa561916 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,7 +37,8 @@ pub use crate::identities::{one, zero, ConstOne, ConstZero, One, Zero}; pub use crate::int::PrimInt; pub use crate::ops::bytes::{FromBytes, ToBytes}; pub use crate::ops::checked::{ - CheckedAdd, CheckedDiv, CheckedMul, CheckedNeg, CheckedRem, CheckedShl, CheckedShr, CheckedSub, + CheckedAdd, CheckedDiv, CheckedMul, CheckedNeg, CheckedNumOps, CheckedRem, CheckedShl, + CheckedShr, CheckedSub, }; pub use crate::ops::euclid::{CheckedEuclid, Euclid}; pub use crate::ops::inv::Inv; diff --git a/src/ops/checked.rs b/src/ops/checked.rs index da1eb3ea..6ef3386f 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -259,3 +259,10 @@ checked_shift_impl!(CheckedShr, checked_shr, i32); checked_shift_impl!(CheckedShr, checked_shr, i64); checked_shift_impl!(CheckedShr, checked_shr, isize); checked_shift_impl!(CheckedShr, checked_shr, i128); + +/// Generic trait for types implementing basic checked numeric operations. +/// +/// This is automatically implemented for types which implement the operators. +pub trait CheckedNumOps: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv + CheckedRem {} + +impl CheckedNumOps for T where T: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv + CheckedRem {}