Skip to main content

ygopro_data/message/
all_in_one.rs

1//! A unified message type covering all directions.
2//!
3//! Provides [`Direction`], [`MessageType`] and [`Message`], which wrap the ctos/stoc/gm
4//! messages together.
5
6use crate::message::client_to_server;
7use crate::message::server_to_client;
8use crate::message::game_message;
9
10#[derive(Clone, Copy, Debug)]
11pub enum Direction {
12    CTOS,
13    STOC,
14    Other(&'static str)
15}
16
17#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Hash)]
18pub enum MessageType {
19    STOC(server_to_client::MessageType),
20    CTOS(client_to_server::MessageType),
21    GM(game_message::MessageType),
22    Other(&'static str, u8)
23}
24
25#[derive(Debug)]
26pub enum Message {
27    STOC(server_to_client::Message),
28    CTOS(client_to_server::Message),
29    Other((&'static str, Box<dyn std::any::Any + Send + Sync>))
30}
31
32impl From<server_to_client::MessageType> for MessageType {
33    fn from(value: server_to_client::MessageType) -> Self {
34        Self::STOC(value)
35    }
36}
37impl From<client_to_server::MessageType> for MessageType {
38    fn from(value: client_to_server::MessageType) -> Self {
39        Self::CTOS(value)
40    }
41}
42
43impl From<game_message::MessageType> for MessageType {
44    fn from(value: game_message::MessageType) -> Self {
45        Self::GM(value)
46    }
47}
48
49impl From<MessageType> for u8 {
50    fn from(value: MessageType) -> Self {
51        match value {
52            MessageType::STOC(message_type) => message_type.into(),
53            MessageType::CTOS(message_type) => message_type.into(),
54            MessageType::GM(message_type) => u8::from(message_type),
55            MessageType::Other(_, code) => code,
56        }
57    }
58}
59
60#[macro_export]
61macro_rules! every_message {
62    ($ident: path) => {
63        ygopro_data::every_client_to_server_message!($ident);
64        ygopro_data::every_server_to_client_message!($ident);
65        ygopro_data::every_game_message_message!($ident);
66    };
67}
68
69