mcsr_ranked_api/user/
identifier.rs1use std::{fmt::Display, num::NonZeroU64};
2
3use serde::Serialize;
4use uuid::Uuid;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum UserIdentifier<'a> {
9 Uuid(Uuid),
11 Nickname(&'a str),
13 DiscordId(u64),
15}
16
17impl From<u64> for UserIdentifier<'_> {
18 fn from(value: u64) -> Self {
19 Self::DiscordId(value)
20 }
21}
22impl From<NonZeroU64> for UserIdentifier<'_> {
23 fn from(value: NonZeroU64) -> Self {
24 Self::DiscordId(value.get())
25 }
26}
27impl From<Uuid> for UserIdentifier<'_> {
28 fn from(value: Uuid) -> Self {
29 Self::Uuid(value)
30 }
31}
32impl<'a> From<&'a str> for UserIdentifier<'a> {
33 fn from(value: &'a str) -> Self {
34 Self::Nickname(value)
35 }
36}
37
38impl Display for UserIdentifier<'_> {
39 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 match &self {
41 Self::Uuid(uuid) => write!(f, "{uuid}"),
42 Self::Nickname(name) => write!(f, "{name}"),
43 Self::DiscordId(snowflake) => write!(f, "discord.{snowflake}"),
44 }
45 }
46}
47
48impl Serialize for UserIdentifier<'_> {
49 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
50 where
51 S: serde::Serializer,
52 {
53 serializer.serialize_newtype_struct("UserIdentifier", &self.to_string())
54 }
55}