Skip to main content

sea_orm/value/
with_chrono.rs

1use super::impl_timestamp;
2use crate as sea_orm;
3use crate::{DbErr, TryGetError, prelude::ChronoDateTimeUtc};
4use std::ops::{Deref, DerefMut};
5
6/// A `DateTime<Utc>` stored as a Unix timestamp (seconds) `i64` in the database.
7#[derive(derive_more::Debug, Copy, Clone, PartialEq, Eq, Hash)]
8#[debug("{_0:?}")]
9pub struct ChronoUnixTimestamp(pub ChronoDateTimeUtc);
10
11/// A `DateTime<Utc>` stored as a Unix timestamp in milliseconds (`i64`) in the database.
12#[derive(derive_more::Debug, Copy, Clone, PartialEq, Eq, Hash)]
13#[debug("{_0:?}")]
14pub struct ChronoUnixTimestampMillis(pub ChronoDateTimeUtc);
15
16impl_timestamp!(
17    ChronoUnixTimestamp,
18    ChronoDateTimeUtc,
19    from_timestamp,
20    to_timestamp
21);
22super::impl_serde_with_i64!(ChronoUnixTimestamp, from_timestamp, to_timestamp);
23
24impl_timestamp!(
25    ChronoUnixTimestampMillis,
26    ChronoDateTimeUtc,
27    from_timestamp_millis,
28    to_timestamp_millis
29);
30super::impl_serde_with_i64!(
31    ChronoUnixTimestampMillis,
32    from_timestamp_millis,
33    to_timestamp_millis
34);
35
36fn from_timestamp(ts: i64) -> Option<ChronoUnixTimestamp> {
37    ChronoDateTimeUtc::from_timestamp(ts, 0).map(ChronoUnixTimestamp)
38}
39
40fn to_timestamp(ts: ChronoUnixTimestamp) -> i64 {
41    ts.0.timestamp()
42}
43
44fn from_timestamp_millis(ts: i64) -> Option<ChronoUnixTimestampMillis> {
45    ChronoDateTimeUtc::from_timestamp_millis(ts).map(ChronoUnixTimestampMillis)
46}
47
48fn to_timestamp_millis(ts: ChronoUnixTimestampMillis) -> i64 {
49    ts.0.timestamp_millis()
50}