1use serde::{Deserialize, Serialize};
4
5use super::expressions::Expr;
6use super::time::TimeWindow;
7use super::windows::OrderByClause;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum Query {
11 Backtest(BacktestQuery),
12 Alert(AlertQuery),
13 With(WithQuery),
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct BacktestQuery {
19 pub strategy: String,
20 pub window: TimeWindow,
21 pub parameters: Vec<(String, Expr)>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct AlertQuery {
26 pub condition: Expr,
27 pub message: Option<String>,
28 pub webhook: Option<String>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct Cte {
34 pub name: String,
36 pub columns: Option<Vec<String>>,
38 pub query: Box<Query>,
40 pub recursive: bool,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct WithQuery {
47 pub ctes: Vec<Cte>,
49 pub query: Box<Query>,
51}
52
53#[derive(Debug, Clone, Default, Serialize, Deserialize)]
55pub struct QueryModifiers {
56 pub limit: Option<usize>,
58 pub order_by: Option<OrderByClause>,
60}