#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PlayerId(pub u8);
impl PlayerId {
pub fn index(self) -> usize {
self.0 as usize
}
pub fn from_index(index: usize) -> Option<PlayerId> {
u8::try_from(index).ok().map(PlayerId)
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PeerId(pub u8);
impl From<PlayerId> for PeerId {
fn from(player: PlayerId) -> PeerId {
PeerId(player.0)
}
}
impl From<PeerId> for PlayerId {
fn from(peer: PeerId) -> PlayerId {
PlayerId(peer.0)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn peer_i_is_player_i_and_back() {
assert_eq!(PeerId::from(PlayerId(3)), PeerId(3));
assert_eq!(PlayerId::from(PeerId(5)), PlayerId(5));
}
#[test]
fn a_player_id_is_an_index() {
assert_eq!(PlayerId(2).index(), 2);
assert_eq!(PlayerId::from_index(7), Some(PlayerId(7)));
assert_eq!(PlayerId::from_index(256), None);
}
#[test]
fn the_first_player_is_the_default() {
assert_eq!(PlayerId::default(), PlayerId(0));
assert_eq!(PeerId::default(), PeerId(0));
}
}