1use serde::{Deserialize, Serialize};
4
5use super::literals::Duration;
6
7pub use crate::data::{Timeframe, TimeframeUnit};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub enum TimeReference {
12 Absolute(String), Named(NamedTime),
16 Relative(RelativeTime),
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21pub enum DateTimeExpr {
22 Absolute(String),
24 Literal(String),
26 Named(NamedTime),
28 Relative {
30 base: Box<DateTimeExpr>,
31 offset: Duration,
32 },
33 Arithmetic {
35 base: Box<DateTimeExpr>,
36 operator: String,
37 duration: Duration,
38 },
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
42pub enum NamedTime {
43 Today,
44 Yesterday,
45 Now,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct RelativeTime {
50 pub amount: i32,
51 pub unit: TimeUnit,
52 pub direction: TimeDirection,
53}
54
55#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
56pub enum TimeUnit {
57 Minutes,
58 Hours,
59 Days,
60 Weeks,
61 Months,
62 Samples,
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
66pub enum TimeDirection {
67 Ago,
68 Future,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub enum TimeWindow {
73 Last { amount: i32, unit: TimeUnit },
75 Between {
77 start: TimeReference,
78 end: TimeReference,
79 },
80 Window { start: i32, end: Option<i32> },
82 Session { start: String, end: String },
84}