Serialize time as a millis epoch timestamp in cursors
This commit is contained in:
parent
b2543b29d3
commit
f06c74c85c
|
@ -5,17 +5,46 @@ pub mod note;
|
|||
pub mod timeline;
|
||||
pub mod user;
|
||||
|
||||
use crate::endpoints::ErrorKind;
|
||||
use crate::util_types::U64Range;
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::de::Error;
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
use ts_rs::TS;
|
||||
|
||||
pub(crate) mod packed_time {
|
||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||
use serde::de::Error;
|
||||
use serde::{Deserialize, Deserializer, Serializer};
|
||||
|
||||
pub(crate) fn serialize<S>(value: &DateTime<Utc>, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
serializer.serialize_str(&value.timestamp_millis().to_string())
|
||||
}
|
||||
|
||||
pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
Ok(DateTime::<Utc>::from_utc(
|
||||
NaiveDateTime::from_timestamp_millis(
|
||||
String::deserialize(deserializer)?
|
||||
.parse::<i64>()
|
||||
.map_err(Error::custom)?,
|
||||
)
|
||||
.ok_or_else(|| Error::custom("millisecond value out of range"))?,
|
||||
Utc,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, TS)]
|
||||
#[ts(export)]
|
||||
pub struct RangeFilter {
|
||||
#[serde(with = "packed_time")]
|
||||
pub time_start: DateTime<Utc>,
|
||||
#[serde(with = "packed_time")]
|
||||
pub time_end: DateTime<Utc>,
|
||||
pub id_start: String,
|
||||
pub id_end: String,
|
||||
|
@ -24,6 +53,7 @@ pub struct RangeFilter {
|
|||
#[derive(Clone, Debug, Deserialize, Serialize, TS)]
|
||||
#[ts(export)]
|
||||
pub struct StartFilter {
|
||||
#[serde(with = "packed_time")]
|
||||
pub time_start: DateTime<Utc>,
|
||||
pub id_start: String,
|
||||
}
|
||||
|
@ -31,6 +61,7 @@ pub struct StartFilter {
|
|||
#[derive(Clone, Debug, Deserialize, Serialize, TS)]
|
||||
#[ts(export)]
|
||||
pub struct EndFilter {
|
||||
#[serde(with = "packed_time")]
|
||||
pub time_end: DateTime<Utc>,
|
||||
pub id_end: String,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue