use crate::{
ClassifiedDate, Dt, Lang, Scale, TimeTraits, classify_date, generate_syslog_candidates,
try_compatible_formats,
};
#[inline]
pub(crate) fn parse_syslog_no_year(input: &str, lang: Lang, ref_time: &Option<Dt>) -> Option<Dt> {
let now = if let Some(tp) = ref_time {
*tp
} else {
#[cfg(feature = "std")]
{
Dt::now().ok()?
}
#[cfg(not(feature = "std"))]
{
return None; }
};
let g = now.to_ymdhms(Scale::UTC);
let this_year = g.yr;
let try_with_year = |year: i64| -> Option<Dt> {
let s = alloc::format!("{} {}", year, input);
let cls = classify_date(&s, lang, ref_time).ok()?;
match cls {
ClassifiedDate::Cls(c) => try_compatible_formats(&s, generate_syslog_candidates(&c)),
_ => None,
}
};
if let Some(dt) = try_with_year(this_year) {
if dt > now + 2.days() {
return try_with_year(this_year - 1);
}
return Some(dt);
}
try_with_year(this_year - 1)
}