mod from_bin_ccsds;
mod from_str;
mod from_str_ccsds;
mod to_bin_ccsds;
mod to_deep_time;
#[cfg(feature = "alloc")]
mod to_str_ccsds;
#[cfg(feature = "chrono")]
mod to_chrono;
#[cfg(feature = "jiff")]
mod to_jiff;
use crate::{LiteStr, Scale};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "js", derive(tsify::Tsify))]
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct TimeParts {
pub yr: Option<i64>,
pub mo: Option<u8>,
pub day: Option<u8>,
pub hr: Option<u8>,
pub min: Option<u8>,
pub sec: Option<u8>,
pub attos: Option<u64>,
pub offset: Option<Offset>,
pub iana_name: Option<LiteStr<49>>,
pub is_leap_sec: bool,
pub scale: Scale,
pub wkday: Option<Weekday>,
pub day_of_yr: Option<u16>,
pub iso_wk_yr: Option<i64>,
pub iso_wk: Option<u8>,
pub wk_sun: Option<u8>,
pub wk_mon: Option<u8>,
pub meridiem: Option<Meridiem>,
pub unix_timestamp_seconds: Option<i64>,
}
impl TimeParts {
#[inline]
pub fn new_utc() -> Self {
Self {
scale: Scale::UTC,
..Default::default()
}
}
#[inline]
pub fn set_iana_name(&mut self, name: Option<&str>) -> &mut Self {
self.iana_name = name.and_then(|s| Some(LiteStr::from_str(s)));
self
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "js", derive(tsify::Tsify))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Meridiem {
#[default]
AM,
PM,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "js", derive(tsify::Tsify))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Weekday {
#[default]
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
impl Weekday {
#[inline]
pub const fn from_sunday_zero_offset(n: u8) -> Option<Self> {
match n {
0 => Some(Weekday::Sunday),
1 => Some(Weekday::Monday),
2 => Some(Weekday::Tuesday),
3 => Some(Weekday::Wednesday),
4 => Some(Weekday::Thursday),
5 => Some(Weekday::Friday),
6 => Some(Weekday::Saturday),
_ => None,
}
}
#[inline]
pub const fn from_monday_one_offset(n: u8) -> Option<Self> {
match n {
1 => Some(Weekday::Monday),
2 => Some(Weekday::Tuesday),
3 => Some(Weekday::Wednesday),
4 => Some(Weekday::Thursday),
5 => Some(Weekday::Friday),
6 => Some(Weekday::Saturday),
7 => Some(Weekday::Sunday),
_ => None,
}
}
#[inline]
pub const fn wk_sun(self) -> u8 {
match self {
Weekday::Sunday => 0,
Weekday::Monday => 1,
Weekday::Tuesday => 2,
Weekday::Wednesday => 3,
Weekday::Thursday => 4,
Weekday::Friday => 5,
Weekday::Saturday => 6,
}
}
#[inline]
pub const fn wk_mon(self) -> u8 {
match self {
Weekday::Monday => 1,
Weekday::Tuesday => 2,
Weekday::Wednesday => 3,
Weekday::Thursday => 4,
Weekday::Friday => 5,
Weekday::Saturday => 6,
Weekday::Sunday => 7,
}
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "js", derive(tsify::Tsify))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Offset {
#[default]
Utc,
None,
Fixed(i32),
}