use crate::interpreter::{RawDay, RawMonth, RawYear};
use crate::models::{DayConfig, Extracted, MonthConfig, YearConfig};
pub fn validate_day(raw: RawDay, config: &DayConfig) -> Option<u8> {
raw.and_then(|(v, _dc)| {
if v >= config.min && v <= config.max {
Some(v)
} else {
None
}
})
}
pub fn validate_month(raw: RawMonth, config: &MonthConfig) -> RawMonth {
raw.and_then(|(n, name)| {
if n >= config.min && n <= config.max {
Some((n, name))
} else {
None
}
})
}
pub fn validate_year(raw: RawYear, config: &YearConfig) -> RawYear {
raw.and_then(|y| {
if y >= config.min && y <= config.max {
Some(y)
} else {
None
}
})
}
pub fn apply_default<T: Copy>(val: Option<T>, default: Option<T>) -> Extracted<T> {
match val {
Some(v) => Extracted::Found(v),
None => match default {
Some(d) => Extracted::Defaulted(d),
None => Extracted::NotFound,
},
}
}