reifydb_type/value/
is.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the MIT, see license.md file
3
4use std::fmt::{Debug, Display};
5
6use super::{int::Int, uint::Uint};
7use crate::{Date, DateTime, Decimal, Duration, Time, Uuid4, Uuid7, value::r#type::GetType};
8
9pub trait IsNumber: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default {}
10pub trait IsTemporal: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default {}
11pub trait IsUuid: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default {}
12
13pub trait IsFloat: IsNumber {}
14
15impl IsNumber for f32 {}
16impl IsFloat for f32 {}
17
18impl IsNumber for f64 {}
19impl IsFloat for f64 {}
20
21pub trait IsInt: IsNumber {}
22
23impl IsNumber for i8 {}
24impl IsInt for i8 {}
25
26impl IsNumber for i16 {}
27impl IsInt for i16 {}
28
29impl IsNumber for i32 {}
30impl IsInt for i32 {}
31
32impl IsNumber for i64 {}
33impl IsInt for i64 {}
34
35impl IsNumber for i128 {}
36impl IsInt for i128 {}
37
38pub trait IsUint: IsNumber {}
39
40impl IsNumber for u8 {}
41impl IsUint for u8 {}
42
43impl IsNumber for u16 {}
44impl IsUint for u16 {}
45
46impl IsNumber for u32 {}
47impl IsUint for u32 {}
48
49impl IsNumber for u64 {}
50impl IsUint for u64 {}
51
52impl IsNumber for u128 {}
53impl IsUint for u128 {}
54
55impl IsNumber for Int {}
56impl IsInt for Int {}
57
58impl IsNumber for Uint {}
59impl IsUint for Uint {}
60
61impl IsNumber for Decimal {}
62impl IsFloat for Decimal {}
63
64pub trait IsDate: IsTemporal {}
65pub trait IsTime: IsTemporal {}
66
67impl IsTemporal for Date {}
68impl IsDate for Date {}
69
70impl IsTemporal for DateTime {}
71impl IsDate for DateTime {}
72impl IsTime for DateTime {}
73
74impl IsTemporal for Time {}
75impl IsTime for Time {}
76
77impl IsTemporal for Duration {}
78
79impl IsUuid for Uuid4 {}
80impl IsUuid for Uuid7 {}