1mod from_bin_ccsds;
2mod from_str;
3mod from_str_ccsds;
4mod to_bin_ccsds;
5mod to_deep_time;
6
7#[cfg(feature = "alloc")]
8mod to_str_ccsds;
9
10#[cfg(feature = "chrono")]
11mod to_chrono;
12
13#[cfg(feature = "jiff")]
14mod to_jiff;
15
16use crate::{LiteStr, Scale};
17
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32#[cfg_attr(feature = "js", derive(tsify::Tsify))]
33#[derive(Debug, Clone, Copy, Default, PartialEq)]
34pub struct TimeParts {
35 pub yr: Option<i64>,
37 pub mo: Option<u8>,
39 pub day: Option<u8>,
41 pub hr: Option<u8>,
43 pub min: Option<u8>,
45 pub sec: Option<u8>,
47 pub attos: Option<u64>,
49 pub offset: Option<Offset>,
51 pub iana_name: Option<LiteStr<49>>,
53 pub is_leap_sec: bool,
55 pub scale: Scale,
57 pub wkday: Option<Weekday>,
59 pub day_of_yr: Option<u16>,
61 pub iso_wk_yr: Option<i64>,
63 pub iso_wk: Option<u8>,
65 pub wk_sun: Option<u8>,
67 pub wk_mon: Option<u8>,
69 pub meridiem: Option<Meridiem>,
71 pub unix_timestamp_seconds: Option<i64>,
73}
74
75impl TimeParts {
76 #[inline]
77 pub fn new_utc() -> TimeParts {
78 Self {
79 scale: Scale::UTC,
80 ..Default::default()
81 }
82 }
83
84 #[inline]
86 pub fn set_iana_name(&mut self, name: Option<&str>) -> &mut Self {
87 self.iana_name = name.map(LiteStr::new);
88 self
89 }
90}
91
92#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
94#[cfg_attr(feature = "js", derive(tsify::Tsify))]
95#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
96pub enum Meridiem {
97 #[default]
98 AM,
99 PM,
100}
101
102#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
104#[cfg_attr(feature = "js", derive(tsify::Tsify))]
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
106pub enum Weekday {
107 #[default]
108 Sunday,
109 Monday,
110 Tuesday,
111 Wednesday,
112 Thursday,
113 Friday,
114 Saturday,
115}
116
117impl Weekday {
118 pub const fn from_sunday_0_based(n: u8) -> Option<Self> {
120 match n {
121 0 => Some(Weekday::Sunday),
122 1 => Some(Weekday::Monday),
123 2 => Some(Weekday::Tuesday),
124 3 => Some(Weekday::Wednesday),
125 4 => Some(Weekday::Thursday),
126 5 => Some(Weekday::Friday),
127 6 => Some(Weekday::Saturday),
128 _ => None,
129 }
130 }
131
132 pub const fn from_monday_1_based(n: u8) -> Option<Self> {
134 match n {
135 1 => Some(Weekday::Monday),
136 2 => Some(Weekday::Tuesday),
137 3 => Some(Weekday::Wednesday),
138 4 => Some(Weekday::Thursday),
139 5 => Some(Weekday::Friday),
140 6 => Some(Weekday::Saturday),
141 7 => Some(Weekday::Sunday),
142 _ => None,
143 }
144 }
145
146 pub const fn wkday_sun_0_based(self) -> u8 {
148 match self {
149 Weekday::Sunday => 0,
150 Weekday::Monday => 1,
151 Weekday::Tuesday => 2,
152 Weekday::Wednesday => 3,
153 Weekday::Thursday => 4,
154 Weekday::Friday => 5,
155 Weekday::Saturday => 6,
156 }
157 }
158
159 pub const fn wkday_sun_1_based(self) -> u8 {
161 match self {
162 Weekday::Sunday => 1,
163 Weekday::Monday => 2,
164 Weekday::Tuesday => 3,
165 Weekday::Wednesday => 4,
166 Weekday::Thursday => 5,
167 Weekday::Friday => 6,
168 Weekday::Saturday => 7,
169 }
170 }
171
172 pub const fn wkday_mon_0_based(self) -> u8 {
174 match self {
175 Weekday::Monday => 0,
176 Weekday::Tuesday => 1,
177 Weekday::Wednesday => 2,
178 Weekday::Thursday => 3,
179 Weekday::Friday => 4,
180 Weekday::Saturday => 5,
181 Weekday::Sunday => 6,
182 }
183 }
184
185 pub const fn wkday_mon_1_based(self) -> u8 {
187 match self {
188 Weekday::Monday => 1,
189 Weekday::Tuesday => 2,
190 Weekday::Wednesday => 3,
191 Weekday::Thursday => 4,
192 Weekday::Friday => 5,
193 Weekday::Saturday => 6,
194 Weekday::Sunday => 7,
195 }
196 }
197}
198
199#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
201#[cfg_attr(feature = "js", derive(tsify::Tsify))]
202#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
203pub enum Offset {
204 #[default]
205 Utc,
206 None,
207 Fixed(i32),
209}