use std::{collections::HashMap, hash::Hash, sync::Arc};
use tokio::sync::Mutex;
use crate::common::message::{RoomId, Round, User};
pub(crate) type ArcMut<T> = Arc<Mutex<T>>;
pub(crate) type Connections<K, Conn> = ArcMut<HashMap<K, Conn>>;
pub(crate) type Rooms<K> = ArcMut<HashMap<RoomId, ArcMut<RoomData<K>>>>;
#[derive(Debug, Clone)]
pub struct RoomData<K: Hash> {
pub users: HashMap<K, User>,
pub round: Option<Round>,
}
impl<K: Hash> Default for RoomData<K> {
fn default() -> Self {
RoomData {
users: HashMap::new(),
round: None,
}
}
}
impl<'a, K: Hash> From<(&'a K, &'a User)> for crate::common::rps::move_validation::UserState {
fn from((_, user): (&'a K, &'a User)) -> Self {
user.into()
}
}