Skip to main content

radiate_utils/primitives/
mod.rs

1mod float;
2mod integer;
3
4use std::fmt::{Debug, Display};
5
6pub use float::Float;
7pub use integer::Integer;
8use num_traits::{Num, NumCast};
9use rand::distr::uniform::SampleUniform;
10
11pub trait Primitive:
12    Num + NumCast + Copy + PartialEq + SampleUniform + Debug + Display + Default + PartialOrd
13{
14    const HALF: Self;
15    const MIN: Self;
16    const MAX: Self;
17    const ZERO: Self;
18    const ONE: Self;
19    const TWO: Self;
20
21    fn safe_add(self, rhs: Self) -> Self;
22    fn safe_sub(self, rhs: Self) -> Self;
23    fn safe_mul(self, rhs: Self) -> Self;
24    fn safe_div(self, rhs: Self) -> Self;
25    fn safe_mean(self, rhs: Self) -> Self;
26    fn is_equal(self, rhs: Self) -> bool;
27
28    fn extract<T: NumCast>(self) -> Option<T> {
29        T::from(self)
30    }
31}