use icu_time::scaffold::IntoOption;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
serde(rename_all = "lowercase")
)]
#[non_exhaustive]
pub enum Length {
Long,
#[default]
Medium,
Short,
}
impl IntoOption<Length> for Length {
#[inline]
fn into_option(self) -> Option<Self> {
Some(self)
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
serde(rename_all = "lowercase")
)]
#[non_exhaustive]
pub enum Alignment {
#[default]
Auto,
Column,
}
impl IntoOption<Alignment> for Alignment {
#[inline]
fn into_option(self) -> Option<Self> {
Some(self)
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
serde(rename_all = "camelCase")
)]
#[non_exhaustive]
pub enum YearStyle {
#[default]
Auto,
Full,
WithEra,
NoEra,
}
impl IntoOption<YearStyle> for YearStyle {
#[inline]
fn into_option(self) -> Option<Self> {
Some(self)
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
all(feature = "serde", feature = "unstable"),
serde(from = "TimePrecisionSerde", into = "TimePrecisionSerde")
)]
#[non_exhaustive]
pub enum TimePrecision {
Hour,
Minute,
#[default]
Second,
Subsecond(SubsecondDigits),
MinuteOptional,
}
impl IntoOption<TimePrecision> for TimePrecision {
#[inline]
fn into_option(self) -> Option<Self> {
Some(self)
}
}
#[cfg(all(feature = "serde", feature = "unstable"))]
#[derive(Copy, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
enum TimePrecisionSerde {
Hour,
Minute,
Second,
Subsecond1,
Subsecond2,
Subsecond3,
Subsecond4,
Subsecond5,
Subsecond6,
Subsecond7,
Subsecond8,
Subsecond9,
MinuteOptional,
}
#[cfg(all(feature = "serde", feature = "unstable"))]
impl From<TimePrecision> for TimePrecisionSerde {
fn from(value: TimePrecision) -> Self {
match value {
TimePrecision::Hour => TimePrecisionSerde::Hour,
TimePrecision::Minute => TimePrecisionSerde::Minute,
TimePrecision::Second => TimePrecisionSerde::Second,
TimePrecision::Subsecond(SubsecondDigits::S1) => TimePrecisionSerde::Subsecond1,
TimePrecision::Subsecond(SubsecondDigits::S2) => TimePrecisionSerde::Subsecond2,
TimePrecision::Subsecond(SubsecondDigits::S3) => TimePrecisionSerde::Subsecond3,
TimePrecision::Subsecond(SubsecondDigits::S4) => TimePrecisionSerde::Subsecond4,
TimePrecision::Subsecond(SubsecondDigits::S5) => TimePrecisionSerde::Subsecond5,
TimePrecision::Subsecond(SubsecondDigits::S6) => TimePrecisionSerde::Subsecond6,
TimePrecision::Subsecond(SubsecondDigits::S7) => TimePrecisionSerde::Subsecond7,
TimePrecision::Subsecond(SubsecondDigits::S8) => TimePrecisionSerde::Subsecond8,
TimePrecision::Subsecond(SubsecondDigits::S9) => TimePrecisionSerde::Subsecond9,
TimePrecision::MinuteOptional => TimePrecisionSerde::MinuteOptional,
}
}
}
#[cfg(all(feature = "serde", feature = "unstable"))]
impl From<TimePrecisionSerde> for TimePrecision {
fn from(value: TimePrecisionSerde) -> Self {
match value {
TimePrecisionSerde::Hour => TimePrecision::Hour,
TimePrecisionSerde::Minute => TimePrecision::Minute,
TimePrecisionSerde::Second => TimePrecision::Second,
TimePrecisionSerde::Subsecond1 => TimePrecision::Subsecond(SubsecondDigits::S1),
TimePrecisionSerde::Subsecond2 => TimePrecision::Subsecond(SubsecondDigits::S2),
TimePrecisionSerde::Subsecond3 => TimePrecision::Subsecond(SubsecondDigits::S3),
TimePrecisionSerde::Subsecond4 => TimePrecision::Subsecond(SubsecondDigits::S4),
TimePrecisionSerde::Subsecond5 => TimePrecision::Subsecond(SubsecondDigits::S5),
TimePrecisionSerde::Subsecond6 => TimePrecision::Subsecond(SubsecondDigits::S6),
TimePrecisionSerde::Subsecond7 => TimePrecision::Subsecond(SubsecondDigits::S7),
TimePrecisionSerde::Subsecond8 => TimePrecision::Subsecond(SubsecondDigits::S8),
TimePrecisionSerde::Subsecond9 => TimePrecision::Subsecond(SubsecondDigits::S9),
TimePrecisionSerde::MinuteOptional => TimePrecision::MinuteOptional,
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum SubsecondDigits {
S1 = 1,
S2 = 2,
S3 = 3,
S4 = 4,
S5 = 5,
S6 = 6,
S7 = 7,
S8 = 8,
S9 = 9,
}
impl SubsecondDigits {
pub fn try_from_int(value: u8) -> Option<Self> {
use SubsecondDigits::*;
match value {
1 => Some(S1),
2 => Some(S2),
3 => Some(S3),
4 => Some(S4),
5 => Some(S5),
6 => Some(S6),
7 => Some(S7),
8 => Some(S8),
9 => Some(S9),
_ => None,
}
}
}
impl From<SubsecondDigits> for u8 {
fn from(value: SubsecondDigits) -> u8 {
use SubsecondDigits::*;
match value {
S1 => 1,
S2 => 2,
S3 => 3,
S4 => 4,
S5 => 5,
S6 => 6,
S7 => 7,
S8 => 8,
S9 => 9,
}
}
}