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}