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
13{
14 const HALF: Self;
15
16 fn safe_add(self, rhs: Self) -> Self;
17 fn safe_sub(self, rhs: Self) -> Self;
18 fn safe_mul(self, rhs: Self) -> Self;
19 fn safe_div(self, rhs: Self) -> Self;
20 fn safe_mean(self, rhs: Self) -> Self;
21
22 fn extract<T: NumCast>(self) -> Option<T> {
23 T::from(self)
24 }
25}