1use super::compressed::*;
2use super::encrypted::*;
3use super::plain::*;
4use binrw::prelude::*;
5
6macro_rules! make_message {
7 ($name:ident, $derive_attr:ty, $plain_type:ty) => {
8 #[derive($derive_attr, Debug)]
9 #[brw(little)]
10 pub enum $name {
11 Plain($plain_type),
12 Encrypted(EncryptedMessage),
13 Compressed(CompressedMessage),
14 }
15 };
16}
17
18make_message!(Request, BinWrite, PlainRequest);
19make_message!(Response, BinRead, PlainResponse);
20
21impl TryFrom<&[u8]> for Response {
22 type Error = binrw::Error;
23 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
24 Response::read(&mut std::io::Cursor::new(value))
25 }
26}