sea_query/value/
with_jiff.rs1use super::*;
2use jiff::{Timestamp, civil};
3
4type_to_value!(civil::Date, JiffDate, Date);
5type_to_value!(civil::Time, JiffTime, Time);
6type_to_box_value!(civil::DateTime, JiffDateTime, Timestamp);
7type_to_box_value!(Timestamp, JiffTimestamp, TimestampWithTimeZone);
8
9impl DateLikeValue for civil::Date {}
10impl TimeLikeValue for civil::Time {}
11impl DateTimeLikeValue for civil::DateTime {}
12impl DateTimeLikeValue for Timestamp {}
13
14impl DateLikeValueNullable for Option<civil::Date> {}
15impl TimeLikeValueNullable for Option<civil::Time> {}
16impl DateTimeLikeValueNullable for Option<civil::DateTime> {}
17impl DateTimeLikeValueNullable for Option<Timestamp> {}
18
19impl Value {
20 #[inline]
21 pub fn jiff_date<T: Into<Option<civil::Date>>>(v: T) -> Value {
22 Value::JiffDate(v.into())
23 }
24
25 #[inline]
26 pub fn jiff_time<T: Into<Option<civil::Time>>>(v: T) -> Value {
27 Value::JiffTime(v.into())
28 }
29
30 #[inline]
31 pub fn jiff_date_time<T: Into<Option<civil::DateTime>>>(v: T) -> Value {
32 Value::JiffDateTime(v.into().map(Into::into))
33 }
34
35 #[inline]
36 pub fn jiff_timestamp<T: Into<Option<Timestamp>>>(v: T) -> Value {
37 Value::JiffTimestamp(v.into().map(Into::into))
38 }
39}
40
41impl Value {
42 pub fn is_jiff_date(&self) -> bool {
43 matches!(self, Self::JiffDate(_))
44 }
45
46 pub fn is_jiff_time(&self) -> bool {
47 matches!(self, Self::JiffTime(_))
48 }
49
50 pub fn is_jiff_date_time(&self) -> bool {
51 matches!(self, Self::JiffDateTime(_))
52 }
53
54 pub fn is_jiff_timestamp(&self) -> bool {
55 matches!(self, Self::JiffTimestamp(_))
56 }
57
58 pub fn as_ref_jiff_date(&self) -> Option<&civil::Date> {
59 match self {
60 Self::JiffDate(v) => v.as_ref(),
61 _ => panic!("not Value::JiffDate"),
62 }
63 }
64
65 pub fn as_ref_jiff_time(&self) -> Option<&civil::Time> {
66 match self {
67 Self::JiffTime(v) => v.as_ref(),
68 _ => panic!("not Value::JiffTime"),
69 }
70 }
71
72 pub fn as_ref_jiff_date_time(&self) -> Option<&civil::DateTime> {
73 match self {
74 Self::JiffDateTime(v) => v.as_deref(),
75 _ => panic!("not Value::JiffDateTime"),
76 }
77 }
78
79 pub fn as_ref_jiff_timestamp(&self) -> Option<&Timestamp> {
80 match self {
81 Self::JiffTimestamp(v) => v.as_deref(),
82 _ => panic!("not Value::JiffTimestamp"),
83 }
84 }
85}
86
87impl Value {
88 #[cfg(test)]
89 pub(crate) fn jiff_value_to_string(&self) -> Option<String> {
90 match self {
91 Self::JiffDate(v) => v.as_ref().map(|v| v.to_string()),
92 Self::JiffTime(v) => v.as_ref().map(|v| v.to_string()),
93 Self::JiffDateTime(v) => v.as_ref().map(|v| v.to_string()),
94 Self::JiffTimestamp(v) => v.as_ref().map(|v| v.to_string()),
95 _ => panic!("not jiff Value"),
96 }
97 }
98}