smb 0.7.2

A Pure Rust SMB Client implementation
use super::compressed::*;
use super::encrypted::*;
use super::plain::*;
use binrw::prelude::*;

macro_rules! make_message {
    ($name:ident, $derive_attr:ty, $plain_type:ty) => {
        #[derive($derive_attr, Debug)]
        #[brw(little)]
        pub enum $name {
            Plain($plain_type),
            Encrypted(EncryptedMessage),
            Compressed(CompressedMessage),
        }
    };
}

make_message!(Request, BinWrite, PlainRequest);
make_message!(Response, BinRead, PlainResponse);

impl TryFrom<&[u8]> for Response {
    type Error = binrw::Error;
    fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
        Ok(Response::read(&mut std::io::Cursor::new(value))?)
    }
}