mcsr_ranked_api/user/
identifier.rs

1use std::fmt::Display;
2
3use serde::Serialize;
4use uuid::Uuid;
5
6/// User identifier for API user lookup
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum UserIdentifier<'a> {
9	/// User's minecraft UUID
10	Uuid(Uuid),
11	/// User's minecraft IGN
12	Nickname(&'a str),
13	/// User's discord snowflake id
14	DiscordId(u64),
15}
16impl Display for UserIdentifier<'_> {
17	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18		match &self {
19			UserIdentifier::Uuid(uuid) => write!(f, "{}", uuid),
20			UserIdentifier::Nickname(name) => write!(f, "{}", name),
21			UserIdentifier::DiscordId(snowflake) => write!(f, "discord.{snowflake}"),
22		}
23	}
24}
25
26impl Serialize for UserIdentifier<'_> {
27	fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28	where
29		S: serde::Serializer,
30	{
31		serializer.serialize_newtype_struct("UserIdentifier", &self.to_string())
32	}
33}