#[derive(Clone, Copy, Debug, Default, PartialEq, clap::ValueEnum)]
pub enum TriStateFilter {
#[default]
#[value(name = "-1")]
All,
#[value(name = "0")]
Disabled,
#[value(name = "1")]
Enabled,
}
impl TriStateFilter {
pub fn as_i8(self) -> i8 {
match self {
Self::All => -1,
Self::Disabled => 0,
Self::Enabled => 1,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, clap::ValueEnum)]
pub enum OrderDirection {
#[value(name = "asc")]
Asc,
#[value(name = "desc")]
Desc,
}
impl OrderDirection {
pub const fn as_str(self) -> &'static str {
match self {
Self::Asc => "asc",
Self::Desc => "desc",
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, clap::ValueEnum)]
pub enum SummaryGroup {
#[value(name = "ticker")]
Ticker,
#[value(name = "day")]
Day,
#[value(name = "ticker,day")]
TickerDay,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tri_state_filter_as_i8() {
assert_eq!(TriStateFilter::All.as_i8(), -1);
assert_eq!(TriStateFilter::Disabled.as_i8(), 0);
assert_eq!(TriStateFilter::Enabled.as_i8(), 1);
}
#[test]
fn tri_state_filter_default_is_all() {
assert_eq!(TriStateFilter::default(), TriStateFilter::All);
}
#[test]
fn order_direction_as_str() {
assert_eq!(OrderDirection::Asc.as_str(), "asc");
assert_eq!(OrderDirection::Desc.as_str(), "desc");
}
}