wasm_framework/
httpdate.rs1use std::fmt;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
5pub struct HttpDate(u64);
6
7impl fmt::Display for HttpDate {
9 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
10 use chrono::{DateTime, NaiveDateTime, Utc};
11
12 let dt = DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(self.0 as i64, 0), Utc);
13 fmt::Display::fmt(&dt.to_rfc2822(), f)
14 }
15}
16
17impl From<u64> for HttpDate {
19 fn from(utc_sec: u64) -> HttpDate {
20 HttpDate(utc_sec)
21 }
22}
23
24impl From<i64> for HttpDate {
26 fn from(utc_sec: i64) -> HttpDate {
27 HttpDate(utc_sec as u64)
28 }
29}
30
31impl std::str::FromStr for HttpDate {
32 type Err = chrono::format::ParseError;
33
34 fn from_str(s: &str) -> Result<HttpDate, Self::Err> {
36 let utc_sec = chrono::DateTime::parse_from_rfc2822(s).map(|dt| dt.timestamp() as u64)?;
37 Ok(HttpDate(utc_sec))
38 }
39}
40
41impl HttpDate {
42 pub fn timestamp(&self) -> u64 {
44 self.0
45 }
46}