summaryrefslogtreecommitdiff
path: root/src/models.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/models.rs')
-rw-r--r--src/models.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/models.rs b/src/models.rs
index 15da87b..480ef2f 100644
--- a/src/models.rs
+++ b/src/models.rs
@@ -1,8 +1,10 @@
-use chrono::{DateTime, Utc};
+use chrono::{DateTime, TimeDelta, Utc};
use serde::{Deserialize, Serialize};
use strum::{EnumIter, IntoStaticStr};
use uuid::Uuid;
+const FUTURE_TOLERANCE: TimeDelta = TimeDelta::minutes(5);
+
#[derive(sqlx::Type, Serialize, Deserialize, EnumIter, Debug, IntoStaticStr, Clone, Copy)]
#[sqlx(type_name = "metric_type")]
pub enum MetricType {
@@ -62,6 +64,9 @@ impl TryFrom<MeasurementDataUnchecked> for MeasurementData {
if value.value < 0.0 || value.value.is_nan() {
return Err("Invalid value".to_string());
}
+ if value.measured_at > Utc::now() + FUTURE_TOLERANCE {
+ return Err("measured_at is in the future".to_string());
+ }
if !value.metric_type.accepts(&value.unit) {
let metric_type: &'static str = (&value.metric_type).into();
let unit: &'static str = (&value.unit).into();