smb_msg/
message.rs

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}