use super::Timeframe;
#[derive(Debug, Clone)]
pub struct DataQuery {
pub id: String,
pub timeframe: Timeframe,
pub start: Option<i64>,
pub end: Option<i64>,
pub limit: Option<usize>,
}
impl DataQuery {
pub fn new(id: &str, timeframe: Timeframe) -> Self {
Self {
id: id.to_string(),
timeframe,
start: None,
end: None,
limit: None,
}
}
pub fn range(mut self, start: i64, end: i64) -> Self {
self.start = Some(start);
self.end = Some(end);
self
}
pub fn start(mut self, start: i64) -> Self {
self.start = Some(start);
self
}
pub fn end(mut self, end: i64) -> Self {
self.end = Some(end);
self
}
pub fn limit(mut self, n: usize) -> Self {
self.limit = Some(n);
self
}
pub fn has_range(&self) -> bool {
self.start.is_some() || self.end.is_some()
}
}
impl Default for DataQuery {
fn default() -> Self {
Self::new("", Timeframe::default())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_query_builder() {
let query = DataQuery::new("AAPL", Timeframe::d1())
.range(1000, 2000)
.limit(100);
assert_eq!(query.id, "AAPL");
assert_eq!(query.start, Some(1000));
assert_eq!(query.end, Some(2000));
assert_eq!(query.limit, Some(100));
}
}