use crate::{Dt, Lang};
use alloc::string::String;
use alloc::vec::Vec;
#[derive(Clone, Copy, Debug, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
pub enum Order {
#[default]
Smart,
Year,
Day,
Month,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub enum Mode {
#[default]
Auto,
Explicit,
UnixTimestamp,
Legacy,
Scientific,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
#[derive(Clone, Debug, PartialEq)]
pub struct ParseCfg {
#[cfg_attr(feature = "serde", serde(default))]
pub parse: Option<Vec<String>>,
#[cfg_attr(feature = "serde", serde(default))]
pub mode: Mode,
#[cfg_attr(feature = "serde", serde(default))]
pub order: Order,
#[cfg_attr(feature = "serde", serde(default))]
pub lang: Lang,
#[cfg_attr(feature = "serde", serde(default = "default_true"))]
pub to_lower: bool,
#[cfg_attr(feature = "serde", serde(default = "default_true"))]
pub relative: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub ref_time: Option<Dt>,
}
#[cfg(feature = "serde")]
fn default_true() -> bool {
true
}
impl Default for ParseCfg {
fn default() -> ParseCfg {
Self {
parse: None,
mode: Mode::default(),
order: Order::default(),
lang: Lang::default(),
to_lower: true,
relative: true,
ref_time: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum OrderFirst {
Year,
Month,
Day,
}
#[derive(Clone)]
pub(crate) struct AmBuilder {
pub pieces: Vec<&'static str>,
pub seen_year: bool,
pub seen_month: bool,
pub seen_day: bool,
}
#[inline]
pub(crate) fn append_to_all(builders: &mut Vec<AmBuilder>, s: &'static str) {
for b in builders {
b.pieces.push(s);
}
}