#[derive(Debug, Clone, PartialEq)]
pub(crate) enum FormatToken {
Year(usize),
Month(usize),
Day(usize),
Hour(usize),
Minute(usize),
Second(usize),
IntegerZero(usize),
IntegerHash,
DecimalPoint,
DecimalZero(usize),
ThousandSeparator,
Percent,
Literal(String),
Color(String),
TextPlaceholder,
}
impl FormatToken {
pub fn is_datetime(&self) -> bool {
matches!(
self,
FormatToken::Year(_)
| FormatToken::Month(_)
| FormatToken::Day(_)
| FormatToken::Hour(_)
| FormatToken::Minute(_)
| FormatToken::Second(_)
)
}
pub fn is_numeric(&self) -> bool {
matches!(
self,
FormatToken::IntegerZero(_)
| FormatToken::IntegerHash
| FormatToken::DecimalPoint
| FormatToken::DecimalZero(_)
| FormatToken::ThousandSeparator
| FormatToken::Percent
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_is_datetime() {
assert!(FormatToken::Year(4).is_datetime());
assert!(FormatToken::Month(2).is_datetime());
assert!(FormatToken::Day(2).is_datetime());
assert!(FormatToken::Hour(2).is_datetime());
assert!(FormatToken::Minute(2).is_datetime());
assert!(FormatToken::Second(2).is_datetime());
assert!(!FormatToken::IntegerZero(1).is_datetime());
assert!(!FormatToken::Literal("$".to_string()).is_datetime());
}
#[test]
fn test_is_numeric() {
assert!(FormatToken::IntegerZero(1).is_numeric());
assert!(FormatToken::IntegerHash.is_numeric());
assert!(FormatToken::DecimalPoint.is_numeric());
assert!(FormatToken::DecimalZero(2).is_numeric());
assert!(FormatToken::ThousandSeparator.is_numeric());
assert!(FormatToken::Percent.is_numeric());
assert!(!FormatToken::Year(4).is_numeric());
assert!(!FormatToken::Literal("$".to_string()).is_numeric());
}
}