Skip to main content

reifydb_type/value/
to_value.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use crate::value::{
5	Value,
6	date::Date,
7	datetime::DateTime,
8	decimal::Decimal,
9	duration::Duration,
10	identity::IdentityId,
11	int::Int,
12	ordered_f32::OrderedF32,
13	ordered_f64::OrderedF64,
14	time::Time,
15	r#type::Type,
16	uint::Uint,
17	uuid::{Uuid4, Uuid7},
18};
19
20pub trait ToValue {
21	fn to_value(&self) -> Value;
22}
23
24impl ToValue for i8 {
25	fn to_value(&self) -> Value {
26		Value::Int1(*self)
27	}
28}
29
30impl ToValue for i16 {
31	fn to_value(&self) -> Value {
32		Value::Int2(*self)
33	}
34}
35
36impl ToValue for i32 {
37	fn to_value(&self) -> Value {
38		Value::Int4(*self)
39	}
40}
41
42impl ToValue for i64 {
43	fn to_value(&self) -> Value {
44		Value::Int8(*self)
45	}
46}
47
48impl ToValue for i128 {
49	fn to_value(&self) -> Value {
50		Value::Int16(*self)
51	}
52}
53
54impl ToValue for u8 {
55	fn to_value(&self) -> Value {
56		Value::Uint1(*self)
57	}
58}
59
60impl ToValue for u16 {
61	fn to_value(&self) -> Value {
62		Value::Uint2(*self)
63	}
64}
65
66impl ToValue for u32 {
67	fn to_value(&self) -> Value {
68		Value::Uint4(*self)
69	}
70}
71
72impl ToValue for u64 {
73	fn to_value(&self) -> Value {
74		Value::Uint8(*self)
75	}
76}
77
78impl ToValue for u128 {
79	fn to_value(&self) -> Value {
80		Value::Uint16(*self)
81	}
82}
83
84impl ToValue for f32 {
85	fn to_value(&self) -> Value {
86		OrderedF32::try_from(*self).map(Value::Float4).unwrap_or(Value::None {
87			inner: Type::Float4,
88		})
89	}
90}
91
92impl ToValue for f64 {
93	fn to_value(&self) -> Value {
94		OrderedF64::try_from(*self).map(Value::Float8).unwrap_or(Value::None {
95			inner: Type::Float8,
96		})
97	}
98}
99
100impl ToValue for Decimal {
101	fn to_value(&self) -> Value {
102		Value::Decimal(self.clone())
103	}
104}
105
106impl ToValue for Int {
107	fn to_value(&self) -> Value {
108		Value::Int(self.clone())
109	}
110}
111
112impl ToValue for Uint {
113	fn to_value(&self) -> Value {
114		Value::Uint(self.clone())
115	}
116}
117
118impl ToValue for Date {
119	fn to_value(&self) -> Value {
120		Value::Date(*self)
121	}
122}
123
124impl ToValue for DateTime {
125	fn to_value(&self) -> Value {
126		Value::DateTime(*self)
127	}
128}
129
130impl ToValue for Time {
131	fn to_value(&self) -> Value {
132		Value::Time(*self)
133	}
134}
135
136impl ToValue for Duration {
137	fn to_value(&self) -> Value {
138		Value::Duration(*self)
139	}
140}
141
142impl ToValue for Uuid4 {
143	fn to_value(&self) -> Value {
144		Value::Uuid4(*self)
145	}
146}
147
148impl ToValue for Uuid7 {
149	fn to_value(&self) -> Value {
150		Value::Uuid7(*self)
151	}
152}
153
154impl ToValue for IdentityId {
155	fn to_value(&self) -> Value {
156		Value::IdentityId(*self)
157	}
158}