smb_msg/
message.rs

1//! Full Request & Response enums, including plain or transformed (encrypted/compressed).
2
3use 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        /// - Plain, Encrypted, Compressed, directly after the NetBios header (magic + 24-bit size).
10        #[$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}