zero-trust-rps 0.0.5

Online Multiplayer Rock Paper Scissors
Documentation
use crate::common::message::{RoomId, RpsData};

use super::{move_kind::UserMoveKind, state::UserMoveMethods};

#[derive(Clone, Copy, Debug)]
pub enum SimpleUserMove {
    JoinRoom(RoomId),
    Play(RpsData),
    ConfirmPlay,
    BackToRoom,
}

impl From<&SimpleUserMove> for UserMoveKind {
    fn from(value: &SimpleUserMove) -> Self {
        match value {
            SimpleUserMove::JoinRoom(_) => UserMoveKind::JoinRoom,
            SimpleUserMove::Play(_) => UserMoveKind::Play,
            SimpleUserMove::ConfirmPlay => UserMoveKind::ConfirmPlay,
            SimpleUserMove::BackToRoom => UserMoveKind::BackToRoom,
        }
    }
}

impl UserMoveMethods for SimpleUserMove {
    fn allowed_state(&self) -> super::state::RpsState {
        Into::<UserMoveKind>::into(self).allowed_state()
    }

    fn resulting_state(&self) -> super::state::RpsState {
        Into::<UserMoveKind>::into(self).resulting_state()
    }
}