1#![allow(clippy::module_name_repetitions)]
2use time::{Duration, OffsetDateTime};
3
4pub use time::format_description::well_known::Rfc3339;
5
6#[must_use]
7pub fn now_utc() -> OffsetDateTime {
8 OffsetDateTime::now_utc()
9}
10
11#[must_use]
12#[allow(clippy::missing_panics_doc)]
13pub fn format_time(time: OffsetDateTime) -> String {
14 #[allow(clippy::unwrap_used)]
15 time.format(&Rfc3339).unwrap()
16}
17
18#[must_use]
19pub fn now_utc_plus_sec_str(sec: f64) -> String {
20 let new_time = now_utc() + Duration::seconds_f64(sec);
21 format_time(new_time)
22}
23
24pub fn parse_utc(moment: &str) -> Result<OffsetDateTime> {
25 OffsetDateTime::parse(moment, &Rfc3339).map_err(|_| Error::FailToDateParse(moment.to_string()))
26}
27
28pub type Result<T> = core::result::Result<T, Error>;
29
30#[derive(Debug)]
31pub enum Error {
32 FailToDateParse(String),
33}
34
35impl core::fmt::Display for Error {
36 fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error> {
37 write!(fmt, "{self:?}")
38 }
39}
40
41impl std::error::Error for Error {}