use crate::discord::ids::{
Id,
marker::{GuildMarker, RoleMarker, UserMarker},
};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum FriendStatus {
None,
Friend,
Blocked,
IncomingRequest,
OutgoingRequest,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RelationshipInfo {
pub user_id: Id<UserMarker>,
pub status: FriendStatus,
pub nickname: Option<String>,
pub display_name: Option<String>,
pub username: Option<String>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct MutualGuildInfo {
pub guild_id: Id<GuildMarker>,
pub nick: Option<String>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct UserProfileInfo {
pub user_id: Id<UserMarker>,
pub username: String,
pub global_name: Option<String>,
pub guild_nick: Option<String>,
pub role_ids: Vec<Id<RoleMarker>>,
pub avatar_url: Option<String>,
pub bio: Option<String>,
pub pronouns: Option<String>,
pub mutual_guilds: Vec<MutualGuildInfo>,
pub mutual_friends_count: u32,
pub friend_status: FriendStatus,
pub note: Option<String>,
}
impl UserProfileInfo {
pub fn display_name(&self) -> &str {
self.guild_nick
.as_deref()
.or(self.global_name.as_deref())
.unwrap_or(&self.username)
}
}