use serde::{Deserialize, Serialize}; use crate::GeoffreyDatabaseModel; #[derive(Serialize, Deserialize, Debug, Clone, Hash, PartialEq, Eq)] pub enum UserID { DiscordUUID(u64), MinecraftUUID(String), } #[derive(Serialize, Deserialize, Debug, Clone, Hash, PartialEq, Eq)] pub struct Player { pub id: Option, pub name: String, pub user_ids: Vec } impl Player { pub fn new(name: &str, user_id: UserID) -> Self { Self { id: None, name: name.to_string(), user_ids: vec![user_id] } } } impl GeoffreyDatabaseModel for Player { fn id(&self) -> Option { self.id } fn set_id(&mut self, id: u64) { self.id = Some(id); } fn tree() -> String { "player".to_string() } 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 { use crate::models::player::Player; use crate::models::player::UserID::{DiscordUUID, MinecraftUUID}; use crate::GeoffreyDatabaseModel; #[test] fn test_player_check_unique() { let p1 = Player::new("CoolTest123", DiscordUUID(0u64)); let p2 = Player::new("NotCoolTest123", DiscordUUID(1u64)); assert!(p1.check_unique(&p2)); let p1 = Player::new("CoolTest123", MinecraftUUID("0".to_string())); let p2 = Player::new("NotCoolTest123", MinecraftUUID("0".to_string())); assert!(!p1.check_unique(&p2)); } }