1use std::fmt::{Debug, Display};
5
6use super::{int::Int, uint::Uint};
7use crate::value::{
8 date::Date,
9 datetime::DateTime,
10 decimal::Decimal,
11 duration::Duration,
12 identity::IdentityId,
13 time::Time,
14 to_value::ToValue,
15 r#type::get::GetType,
16 uuid::{Uuid4, Uuid7},
17};
18
19pub trait IsNumber: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}
20pub trait IsTemporal: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}
21pub trait IsUuid: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}
22
23pub trait IsFloat: IsNumber {}
24
25impl IsNumber for f32 {}
26impl IsFloat for f32 {}
27
28impl IsNumber for f64 {}
29impl IsFloat for f64 {}
30
31pub trait IsInt: IsNumber {}
32
33impl IsNumber for i8 {}
34impl IsInt for i8 {}
35
36impl IsNumber for i16 {}
37impl IsInt for i16 {}
38
39impl IsNumber for i32 {}
40impl IsInt for i32 {}
41
42impl IsNumber for i64 {}
43impl IsInt for i64 {}
44
45impl IsNumber for i128 {}
46impl IsInt for i128 {}
47
48pub trait IsUint: IsNumber {}
49
50impl IsNumber for u8 {}
51impl IsUint for u8 {}
52
53impl IsNumber for u16 {}
54impl IsUint for u16 {}
55
56impl IsNumber for u32 {}
57impl IsUint for u32 {}
58
59impl IsNumber for u64 {}
60impl IsUint for u64 {}
61
62impl IsNumber for u128 {}
63impl IsUint for u128 {}
64
65impl IsNumber for Int {}
66impl IsInt for Int {}
67
68impl IsNumber for Uint {}
69impl IsUint for Uint {}
70
71impl IsNumber for Decimal {}
72impl IsFloat for Decimal {}
73
74pub trait IsDate: IsTemporal {}
75pub trait IsTime: IsTemporal {}
76
77impl IsTemporal for Date {}
78impl IsDate for Date {}
79
80impl IsTemporal for DateTime {}
81impl IsDate for DateTime {}
82impl IsTime for DateTime {}
83
84impl IsTemporal for Time {}
85impl IsTime for Time {}
86
87impl IsTemporal for Duration {}
88
89impl IsUuid for Uuid4 {}
90impl IsUuid for Uuid7 {}
91impl IsUuid for IdentityId {}