use std::sync::Arc;
use serde::de::DeserializeOwned;
use ustr::Ustr;
use crate::{Client, Iter, Player, protocol::*};
pub struct Group {
name: Ustr,
game: Ustr,
members: Vec<Arc<Player>>,
}
impl Group {
pub(crate) fn hydrate<S: DeserializeOwned>(
network: &NetworkSlot,
team: u32,
client: &Client<S>,
) -> Self {
assert_eq!(network.r#type, SlotType::Group);
Group {
name: network.name,
game: network.game,
members: network
.group_members
.iter()
.map(|p| client.player_arc(team, *p).unwrap())
.collect(),
}
}
pub fn name(&self) -> Ustr {
self.name
}
pub fn game(&self) -> Ustr {
self.game
}
pub fn members(&self) -> impl Iter<&Player> {
self.members.iter().map(|p| p.as_ref())
}
}