use clap::Args;
use greed::history_range::HistoryRange;
#[derive(Args, Debug)]
pub struct HistoryRangeArgs {
#[arg(long, group = "history_range")]
pub from: Option<String>,
#[arg(long, requires = "from")]
pub to: Option<String>,
#[arg(long, group = "history_range")]
pub last_hour: bool,
#[arg(long, group = "history_range")]
pub hours: Option<i64>,
#[arg(long, group = "history_range")]
pub days: Option<i64>,
}
impl From<&HistoryRangeArgs> for HistoryRange {
fn from(value: &HistoryRangeArgs) -> Self {
Self {
from: value.from.clone(),
to: value.to.clone(),
last_hour: value.last_hour,
hours: value.hours,
days: value.days,
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn from() {
let args = HistoryRangeArgs {
from: Some("2026-10-01".to_string()),
to: None,
last_hour: false,
hours: Some(3),
days: None,
};
let range: HistoryRange = HistoryRange::from(&args);
let expected = HistoryRange {
from: Some("2026-10-01".to_string()),
hours: Some(3),
..Default::default()
};
assert_eq!(range, expected);
}
}