Skip to content

Commit 5e7d8d1

Browse files
author
Devdutt Shenoi
committed
refactor: date validation
1 parent 9f54e9e commit 5e7d8d1

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/stats.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818

1919
use std::sync::Arc;
2020

21-
use serde::{Deserialize, Serialize};
21+
use chrono::NaiveDate;
22+
use serde::{Deserialize, Deserializer, Serialize};
2223
use tracing::warn;
2324

2425
use crate::{
@@ -210,12 +211,13 @@ pub fn storage_size_labels_date<'a>(stream_name: &'a str, date: &'a str) -> [&'a
210211

211212
#[derive(Debug, Deserialize)]
212213
pub struct StatsParams {
213-
pub date: Option<String>,
214+
#[serde(deserialize_with = "deserialize_date")]
215+
pub date: Option<NaiveDate>,
214216
}
215217

216218
impl StatsParams {
217219
pub fn get_stats(self, stream_name: &str) -> Option<Stats> {
218-
let date = self.date?;
220+
let date = self.date?.to_string();
219221
let event_labels = event_labels_date(stream_name, "json", &date);
220222
let storage_size_labels = storage_size_labels_date(stream_name, &date);
221223
let events_ingested = EVENTS_INGESTED_DATE
@@ -238,3 +240,16 @@ impl StatsParams {
238240
})
239241
}
240242
}
243+
244+
pub fn deserialize_date<'de, D>(deserializer: D) -> Result<Option<NaiveDate>, D::Error>
245+
where
246+
D: Deserializer<'de>,
247+
{
248+
let Some(s) = Option::<String>::deserialize(deserializer)? else {
249+
return Ok(None);
250+
};
251+
252+
NaiveDate::parse_from_str(&s, "%Y-%m-%d")
253+
.map(Some)
254+
.map_err(serde::de::Error::custom)
255+
}

0 commit comments

Comments
 (0)