1use smb_server_proto::types::Status;
6use smb_server_proto_smb2::commands::{
7 ChangeNotifyReq, CloseReq, CreateReq, FlushReq, IoctlReq, LockReq, QueryDirReq, QueryInfoReq,
8 ReadReq, SetInfoReq, WriteReq,
9};
10use smb_server_proto_smb2::session_setup::cmd;
11
12use super::wire::Decode;
13
14macro_rules! decode_via_parse {
16 ($ty:ty, $code:path) => {
17 impl Decode for $ty {
18 const COMMAND: u16 = $code;
19 fn decode(frame: &[u8]) -> Result<Self, Status> {
20 <$ty>::parse(frame).ok_or(Status::INVALID_PARAMETER)
21 }
22 }
23 };
24}
25
26decode_via_parse!(CreateReq, cmd::CREATE);
27decode_via_parse!(CloseReq, cmd::CLOSE);
28decode_via_parse!(FlushReq, cmd::FLUSH);
29decode_via_parse!(ReadReq, cmd::READ);
30decode_via_parse!(WriteReq, cmd::WRITE);
31decode_via_parse!(LockReq, cmd::LOCK);
32decode_via_parse!(IoctlReq, cmd::IOCTL);
33decode_via_parse!(QueryDirReq, cmd::QUERY_DIRECTORY);
34decode_via_parse!(ChangeNotifyReq, cmd::CHANGE_NOTIFY);
35decode_via_parse!(QueryInfoReq, cmd::QUERY_INFO);
36decode_via_parse!(SetInfoReq, cmd::SET_INFO);