Skip to main content

reifydb_value/value/
to_value.rs

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