use serde::{Deserialize, Serialize};
use super::expressions::Expr;
use super::time::TimeWindow;
use super::windows::OrderByClause;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Query {
Backtest(BacktestQuery),
Alert(AlertQuery),
With(WithQuery),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BacktestQuery {
pub strategy: String,
pub window: TimeWindow,
pub parameters: Vec<(String, Expr)>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertQuery {
pub condition: Expr,
pub message: Option<String>,
pub webhook: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Cte {
pub name: String,
pub columns: Option<Vec<String>>,
pub query: Box<Query>,
pub recursive: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WithQuery {
pub ctes: Vec<Cte>,
pub query: Box<Query>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct QueryModifiers {
pub limit: Option<usize>,
pub order_by: Option<OrderByClause>,
}