1use binrw::prelude::*;
4use smb_msg_derive::*;
5
6macro_rules! make_message {
7 ($name:ident, $binrw_type:ident, $plain_type:ty) => {
8 #[doc = concat!("This struct represents all the ", stringify!($name), "message types.")]
9 #[$binrw_type]
11 #[brw(little)]
12 pub enum $name {
13 Plain($plain_type),
14 Encrypted($crate::EncryptedMessage),
15 Compressed($crate::CompressedMessage),
16 }
17 };
18}
19
20make_message!(Request, smb_request_binrw, crate::PlainRequest);
21make_message!(Response, smb_response_binrw, crate::PlainResponse);
22
23#[cfg(feature = "client")]
24impl TryFrom<&[u8]> for Response {
25 type Error = binrw::Error;
26 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
27 Response::read(&mut std::io::Cursor::new(value))
28 }
29}