radiate_utils/primitives/
mod.rs1mod 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}