earthmc 2.0.5

Async client for interacting with the EarthMC API
Documentation
#[cfg(feature = "chrono")]
pub type Timestamp = chrono::DateTime<chrono::Utc>;

#[cfg(not(feature = "chrono"))]
pub type Timestamp = i64;

#[cfg(feature = "chrono")]
pub mod seconds {
    pub use chrono::serde::ts_seconds::{deserialize, serialize};
}

#[cfg(feature = "chrono")]
pub mod optional_seconds {
    pub use chrono::serde::ts_seconds_option::{deserialize, serialize};
}

#[cfg(all(test, feature = "chrono"))]
mod tests {
    use serde::{Deserialize, Serialize};

    use super::Timestamp;

    #[derive(Debug, Deserialize, PartialEq, Serialize)]
    struct TimestampFixture {
        #[serde(with = "crate::model::timestamp::seconds")]
        required: Timestamp,
        #[serde(with = "crate::model::timestamp::optional_seconds")]
        optional: Option<Timestamp>,
    }

    #[test]
    fn deserializes_unix_seconds_as_chrono_timestamps() {
        let fixture: TimestampFixture =
            serde_json::from_str(r#"{"required":1700000000,"optional":null}"#)
                .unwrap();

        assert_eq!(fixture.required.timestamp(), 1_700_000_000);
        assert_eq!(fixture.optional, None);
    }

    #[test]
    fn serializes_chrono_timestamps_as_unix_seconds() {
        let fixture: TimestampFixture = serde_json::from_str(
            r#"{"required":1700000000,"optional":1700000001}"#,
        )
        .unwrap();

        assert_eq!(
            serde_json::to_string(&fixture).unwrap(),
            r#"{"required":1700000000,"optional":1700000001}"#
        );
    }
}