Geoffrey-rs/geoffrey_models/src/models/player.rs

69 lines
1.6 KiB
Rust
Raw Normal View History

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<u64>,
pub name: String,
pub user_ids: Vec<UserID>
}
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<u64> {
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));
}
}