2021-10-03 20:03:32 +00:00
|
|
|
use crate::models::CommandLevel;
|
2021-03-11 00:31:50 +00:00
|
|
|
use crate::GeoffreyDatabaseModel;
|
2021-10-03 20:03:32 +00:00
|
|
|
use serde::{Deserialize, Serialize};
|
2021-03-06 19:19:13 +00:00
|
|
|
|
2021-03-13 20:42:37 +00:00
|
|
|
#[derive(Serialize, Deserialize, Debug, Clone, Hash, PartialEq, Eq)]
|
2021-03-06 19:19:13 +00:00
|
|
|
pub enum UserID {
|
2021-10-03 20:03:32 +00:00
|
|
|
DiscordUUID { discord_uuid: u64 },
|
|
|
|
MinecraftUUID { mc_uuid: String },
|
2021-12-01 04:13:56 +00:00
|
|
|
None,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for UserID {
|
|
|
|
fn default() -> Self {
|
|
|
|
Self::None
|
|
|
|
}
|
2021-03-06 19:19:13 +00:00
|
|
|
}
|
|
|
|
|
2021-03-13 20:42:37 +00:00
|
|
|
#[derive(Serialize, Deserialize, Debug, Clone, Hash, PartialEq, Eq)]
|
2021-03-06 19:19:13 +00:00
|
|
|
pub struct Player {
|
2021-03-11 00:31:50 +00:00
|
|
|
pub id: Option<u64>,
|
2021-03-06 19:19:13 +00:00
|
|
|
pub name: String,
|
2021-10-03 20:03:32 +00:00
|
|
|
pub user_ids: Vec<UserID>,
|
|
|
|
pub auth_level: CommandLevel,
|
2021-03-11 00:31:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Player {
|
|
|
|
pub fn new(name: &str, user_id: UserID) -> Self {
|
|
|
|
Self {
|
|
|
|
id: None,
|
|
|
|
name: name.to_string(),
|
2021-10-03 20:03:32 +00:00
|
|
|
user_ids: vec![user_id],
|
|
|
|
auth_level: CommandLevel::REGISTERED,
|
2021-03-11 00:31:50 +00:00
|
|
|
}
|
|
|
|
}
|
2021-10-03 20:03:32 +00:00
|
|
|
|
|
|
|
pub fn has_user_id(&self, user_id: &UserID) -> bool {
|
|
|
|
self.user_ids.iter().any(|id| id == user_id)
|
|
|
|
}
|
2021-03-11 00:31:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl GeoffreyDatabaseModel for Player {
|
|
|
|
fn id(&self) -> Option<u64> {
|
|
|
|
self.id
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_id(&mut self, id: u64) {
|
|
|
|
self.id = Some(id);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn tree() -> String {
|
|
|
|
"player".to_string()
|
|
|
|
}
|
2021-06-01 00:52:56 +00:00
|
|
|
|
|
|
|
fn check_unique(&self, o: &Self) -> bool {
|
|
|
|
for user1_id in &self.user_ids {
|
|
|
|
if o.user_ids.contains(user1_id) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
2021-10-23 19:13:28 +00:00
|
|
|
use crate::models::player::{Player, UserID};
|
2021-06-01 00:52:56 +00:00
|
|
|
use crate::GeoffreyDatabaseModel;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_player_check_unique() {
|
2021-10-23 19:13:28 +00:00
|
|
|
let p1 = Player::new("CoolTest123", UserID::DiscordUUID { discord_uuid: 0u64 });
|
|
|
|
let p2 = Player::new("NotCoolTest123", UserID::DiscordUUID { discord_uuid: 1u64 });
|
2021-06-01 00:52:56 +00:00
|
|
|
|
|
|
|
assert!(p1.check_unique(&p2));
|
|
|
|
|
2021-10-23 19:13:28 +00:00
|
|
|
let p1 = Player::new(
|
|
|
|
"CoolTest123",
|
|
|
|
UserID::MinecraftUUID {
|
|
|
|
mc_uuid: "0".to_string(),
|
|
|
|
},
|
|
|
|
);
|
|
|
|
let p2 = Player::new(
|
|
|
|
"NotCoolTest123",
|
|
|
|
UserID::MinecraftUUID {
|
|
|
|
mc_uuid: "0".to_string(),
|
|
|
|
},
|
|
|
|
);
|
2021-06-01 00:52:56 +00:00
|
|
|
|
|
|
|
assert!(!p1.check_unique(&p2));
|
|
|
|
}
|
2021-10-03 20:03:32 +00:00
|
|
|
}
|