rbot_messages/messages/
generated_implementations.rs

1// DO NOT EDIT THIS FILE MANUALLY
2// IT IS AUTOMATICALLY GENERATED
3use crate::messages::{self as msg, Message, MessageIdentity};
4use std::io::{Error, ErrorKind};
5
6#[derive(Debug)]
7pub enum MessageType {
8    Error(msg::MsgError),
9    Empty(msg::MsgEmpty),
10    Use(msg::MsgUse),
11    Velocity(msg::MsgVelocity),
12    Angle(msg::MsgAngle),
13    ComponentStatusQuery(msg::MsgComponentStatusQuery),
14    RComponentStatus(msg::RMsgComponentStatus),
15    State(msg::MsgState),
16    RState(msg::RMsgState),
17    ModuleStatusQuery(msg::MsgModuleStatusQuery),
18    RModuleStatus(msg::RMsgModuleStatus),
19    Teleport(msg::MsgTeleport),
20    Radar(msg::MsgRadar),
21    RRadar(msg::RMsgRadar),
22    Laser(msg::MsgLaser),
23    RLaser(msg::RMsgLaser),
24    ForceField(msg::MsgForceField),
25    Mine(msg::MsgMine),
26    Time(msg::MsgTime),
27    RTime(msg::RMsgTime),
28    Repair(msg::MsgRepair),
29    RRepair(msg::RMsgRepair),
30    Thrust(msg::MsgThrust),
31    Scan(msg::MsgScan),
32    RScanObject(msg::RMsgScanObject),
33    RScan(msg::RMsgScan),
34    GPS(msg::MsgGPS),
35    RGPS(msg::RMsgGPS),
36    AwaitAction(msg::MsgAwaitAction),
37}
38
39macro_rules! id {
40    ($n:expr, $msgType:ty) => {
41        impl MessageIdentity for $msgType {
42            fn id() -> i32 {
43                $n
44            }
45        }
46        impl Message for $msgType {
47            fn as_any(&self) -> &dyn std::any::Any {
48                self
49            }
50        }
51    };
52}
53
54id!(0, msg::MsgError);
55id!(1, msg::MsgEmpty);
56id!(2, msg::MsgUse);
57id!(3, msg::MsgVelocity);
58id!(4, msg::MsgAngle);
59id!(5, msg::MsgComponentStatusQuery);
60id!(6, msg::RMsgComponentStatus);
61id!(7, msg::MsgState);
62id!(8, msg::RMsgState);
63id!(9, msg::MsgModuleStatusQuery);
64id!(10, msg::RMsgModuleStatus);
65id!(11, msg::MsgTeleport);
66id!(12, msg::MsgRadar);
67id!(13, msg::RMsgRadar);
68id!(14, msg::MsgLaser);
69id!(15, msg::RMsgLaser);
70id!(16, msg::MsgForceField);
71id!(17, msg::MsgMine);
72id!(18, msg::MsgTime);
73id!(19, msg::RMsgTime);
74id!(20, msg::MsgRepair);
75id!(21, msg::RMsgRepair);
76id!(22, msg::MsgThrust);
77id!(23, msg::MsgScan);
78id!(24, msg::RMsgScanObject);
79id!(25, msg::RMsgScan);
80id!(26, msg::MsgGPS);
81id!(27, msg::RMsgGPS);
82id!(28, msg::MsgAwaitAction);
83
84macro_rules! dec_msg {
85    ($bytes: expr => $msg: ty) => {
86        serde_json::from_slice::<$msg>($bytes)?
87    };
88}
89
90pub fn decode_message(bytes: &[u8], typ: i32) -> Result<MessageType, std::io::Error> {
91    match typ {
92        0 => Ok(MessageType::Error(dec_msg!(bytes => msg::MsgError))),
93        1 => Ok(MessageType::Empty(dec_msg!(bytes => msg::MsgEmpty))),
94        2 => Ok(MessageType::Use(dec_msg!(bytes => msg::MsgUse))),
95        3 => Ok(MessageType::Velocity(dec_msg!(bytes => msg::MsgVelocity))),
96        4 => Ok(MessageType::Angle(dec_msg!(bytes => msg::MsgAngle))),
97        5 => Ok(MessageType::ComponentStatusQuery(
98            dec_msg!(bytes => msg::MsgComponentStatusQuery),
99        )),
100        6 => Ok(MessageType::RComponentStatus(
101            dec_msg!(bytes => msg::RMsgComponentStatus),
102        )),
103        7 => Ok(MessageType::State(dec_msg!(bytes => msg::MsgState))),
104        8 => Ok(MessageType::RState(dec_msg!(bytes => msg::RMsgState))),
105        9 => Ok(MessageType::ModuleStatusQuery(
106            dec_msg!(bytes => msg::MsgModuleStatusQuery),
107        )),
108        10 => Ok(MessageType::RModuleStatus(
109            dec_msg!(bytes => msg::RMsgModuleStatus),
110        )),
111        11 => Ok(MessageType::Teleport(dec_msg!(bytes => msg::MsgTeleport))),
112        12 => Ok(MessageType::Radar(dec_msg!(bytes => msg::MsgRadar))),
113        13 => Ok(MessageType::RRadar(dec_msg!(bytes => msg::RMsgRadar))),
114        14 => Ok(MessageType::Laser(dec_msg!(bytes => msg::MsgLaser))),
115        15 => Ok(MessageType::RLaser(dec_msg!(bytes => msg::RMsgLaser))),
116        16 => Ok(MessageType::ForceField(
117            dec_msg!(bytes => msg::MsgForceField),
118        )),
119        17 => Ok(MessageType::Mine(dec_msg!(bytes => msg::MsgMine))),
120        18 => Ok(MessageType::Time(dec_msg!(bytes => msg::MsgTime))),
121        19 => Ok(MessageType::RTime(dec_msg!(bytes => msg::RMsgTime))),
122        20 => Ok(MessageType::Repair(dec_msg!(bytes => msg::MsgRepair))),
123        21 => Ok(MessageType::RRepair(dec_msg!(bytes => msg::RMsgRepair))),
124        22 => Ok(MessageType::Thrust(dec_msg!(bytes => msg::MsgThrust))),
125        23 => Ok(MessageType::Scan(dec_msg!(bytes => msg::MsgScan))),
126        24 => Ok(MessageType::RScanObject(
127            dec_msg!(bytes => msg::RMsgScanObject),
128        )),
129        25 => Ok(MessageType::RScan(dec_msg!(bytes => msg::RMsgScan))),
130        26 => Ok(MessageType::GPS(dec_msg!(bytes => msg::MsgGPS))),
131        27 => Ok(MessageType::RGPS(dec_msg!(bytes => msg::RMsgGPS))),
132        28 => Ok(MessageType::AwaitAction(
133            dec_msg!(bytes => msg::MsgAwaitAction),
134        )),
135
136        _ => Err(Error::new(ErrorKind::InvalidData, "Unexpected type.")),
137    }
138}