use crate::Dt;
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 DateOrder {
#[default]
Smart,
YearFirst,
DayFirst,
MonthFirst,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub enum DateParseMode {
#[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: DateParseMode,
#[cfg_attr(feature = "serde", serde(default))]
pub order: DateOrder,
#[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))]
pub ref_time: Option<Dt>,
}
#[cfg(feature = "serde")]
fn default_true() -> bool {
true
}
impl Default for ParseCfg {
fn default() -> Self {
Self {
parse: None,
mode: DateParseMode::default(),
order: DateOrder::default(),
lang: Lang::default(),
to_lower: true,
ref_time: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum DetectedDateOrder {
YearFirst,
MonthFirst,
DayFirst,
}
#[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);
}
}
#[allow(dead_code)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum Lang {
#[default]
En,
Aa,
Ab,
Ae,
Af,
Ak,
Am,
An,
Ar,
As,
Av,
Ay,
Az,
Ba,
Be,
Bg,
Bh,
Bi,
Bm,
Bn,
Bo,
Br,
Bs,
Ca,
Ce,
Ch,
Co,
Cr,
Cs,
Cu,
Cv,
Cy,
Da,
De,
Dv,
Dz,
Ee,
El,
Eo,
Es,
Et,
Eu,
Fa,
Ff,
Fi,
Fj,
Fo,
Fr,
Fy,
Ga,
Gd,
Gl,
Gn,
Gu,
Gv,
Ha,
He,
Hi,
Ho,
Hr,
Ht,
Hu,
Hy,
Hz,
Ia,
Id,
Ie,
Ig,
Ii,
Ik,
Io,
Is,
It,
Iu,
Ja,
Jv,
Ka,
Kg,
Ki,
Kj,
Kk,
Kl,
Km,
Kn,
Ko,
Kr,
Ks,
Ku,
Kv,
Kw,
Ky,
La,
Lb,
Lg,
Li,
Ln,
Lo,
Lt,
Lu,
Lv,
Mg,
Mh,
Mi,
Mk,
Ml,
Mn,
Mr,
Ms,
Mt,
My,
Na,
Nb,
Nd,
Ne,
Ng,
Nl,
Nn,
No,
Nr,
Nv,
Ny,
Oc,
Oj,
Om,
Or,
Os,
Pa,
Pi,
Pl,
Ps,
Pt,
Qu,
Rm,
Rn,
Ro,
Ru,
Rw,
Sa,
Sc,
Sd,
Se,
Sg,
Si,
Sk,
Sl,
Sm,
Sn,
So,
Sq,
Sr,
Ss,
St,
Su,
Sv,
Sw,
Ta,
Te,
Tg,
Th,
Ti,
Tk,
Tl,
Tn,
To,
Tr,
Ts,
Tt,
Tw,
Ty,
Ug,
Uk,
Ur,
Uz,
Ve,
Vi,
Vo,
Wa,
Wo,
Xh,
Yi,
Yo,
Za,
Zh,
Zu,
}
impl alloc::fmt::Display for Lang {
fn fmt(&self, f: &mut alloc::fmt::Formatter<'_>) -> alloc::fmt::Result {
write!(f, "{:?}", self)
}
}