use serde::{Deserialize, Serialize};
use super::literals::Duration;
pub use crate::data::{Timeframe, TimeframeUnit};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum TimeReference {
Absolute(String), Named(NamedTime),
Relative(RelativeTime),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum DateTimeExpr {
Absolute(String),
Literal(String),
Named(NamedTime),
Relative {
base: Box<DateTimeExpr>,
offset: Duration,
},
Arithmetic {
base: Box<DateTimeExpr>,
operator: String,
duration: Duration,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum NamedTime {
Today,
Yesterday,
Now,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RelativeTime {
pub amount: i32,
pub unit: TimeUnit,
pub direction: TimeDirection,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub enum TimeUnit {
Minutes,
Hours,
Days,
Weeks,
Months,
Samples,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub enum TimeDirection {
Ago,
Future,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TimeWindow {
Last { amount: i32, unit: TimeUnit },
Between {
start: TimeReference,
end: TimeReference,
},
Window { start: i32, end: Option<i32> },
Session { start: String, end: String },
}