eryon_core/traits/
scalar.rs1pub trait Scalar: Clone + 'static + core::fmt::Debug + core::fmt::Display {
7 private!();
8}
9
10pub trait ScalarExt
11where
12 Self: Scalar
13 + Clone
14 + Copy
15 + PartialEq
16 + PartialOrd
17 + Send
18 + Sync
19 + 'static
20 + core::fmt::Debug
21 + core::fmt::Display
22 + core::iter::Sum
23 + core::ops::Neg
24 + num_traits::One
25 + num_traits::Zero
26 + num_traits::NumOps
27 + num_traits::NumAssignOps
28 + num_traits::FromPrimitive
29 + num_traits::ToPrimitive,
30{
31}
32
33macro_rules! impl_scalar {
34 (@impl $t:ty) => {
35 impl Scalar for $t {
36 seal!();
37 }
38 };
39 (@impl ext: $t:ty) => {
40 impl ScalarExt for $t {}
41 };
42 (@impl $(ext:)? $t:ty) => {
43 impl_scalar!(@impl $(ext:)? $t);
44 };
45 ($($t:ty),* $(,)?) => {
46 $(
47 impl_scalar!(@impl $t);
48 )*
49 };
50 (ext: $($t:ty),* $(,)?) => {
51 $(
52 impl_scalar!(@impl $t);
53 impl_scalar!(@impl ext: $t);
54 )*
55 };
56}
57impl_scalar!(u8, u16, u32, u64, u128, usize);
58impl_scalar!(ext: f32, f64, i8, i16, i32, i64, i128, isize,);