hypixel-sdk 0.2.1

Async client for the Hypixel Public API with typed models and SkyBlock helpers
Documentation
use serde_json::{Map, Value};

/// An arbitrary JSON object preserved verbatim from the API.
pub type JsonObject = Map<String, Value>;

/// Millisecond Unix timestamps as delivered by the API, parsed to `chrono`.
pub mod millis {
    use chrono::{DateTime, TimeZone, Utc};
    use serde::{Deserialize, Deserializer, Serializer};

    pub fn serialize<S: Serializer>(value: &DateTime<Utc>, ser: S) -> Result<S::Ok, S::Error> {
        ser.serialize_i64(value.timestamp_millis())
    }

    pub mod option {
        use super::*;

        pub fn serialize<S: Serializer>(
            value: &Option<DateTime<Utc>>,
            ser: S,
        ) -> Result<S::Ok, S::Error> {
            match value {
                Some(v) => super::serialize(v, ser),
                None => ser.serialize_none(),
            }
        }

        pub fn deserialize<'de, D: Deserializer<'de>>(
            de: D,
        ) -> Result<Option<DateTime<Utc>>, D::Error> {
            let raw = Option::<i64>::deserialize(de)?;
            Ok(raw.and_then(|ms| Utc.timestamp_millis_opt(ms).single()))
        }
    }
}