discord_webhook2/
id.rs

1use std::str::FromStr;
2
3use serde::de::Error;
4use serde::{Deserialize, Deserializer, Serialize, Serializer};
5
6#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq)]
7pub struct DiscordID(pub u64);
8
9impl Serialize for DiscordID {
10    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
11    where
12        S: Serializer,
13    {
14        serializer.serialize_str(&self.0.to_string())
15    }
16}
17
18impl<'de> Deserialize<'de> for DiscordID {
19    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
20    where
21        D: Deserializer<'de>,
22    {
23        let str = String::deserialize(deserializer)?;
24
25        match u64::from_str(&str) {
26            Ok(v) => Ok(Self(v)),
27            Err(e) => Err(Error::custom(format!(
28                "could not deserialize {str:?} into a MessageID: {e:?}"
29            ))),
30        }
31    }
32}