1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
use bytes::{Buf, Bytes}; use crate::mssql::protocol::done::Done; use crate::mssql::protocol::login_ack::LoginAck; use crate::mssql::protocol::order::Order; use crate::mssql::protocol::return_status::ReturnStatus; use crate::mssql::protocol::return_value::ReturnValue; use crate::mssql::protocol::row::Row; #[derive(Debug)] pub(crate) enum Message { LoginAck(LoginAck), Done(Done), DoneInProc(Done), DoneProc(Done), Row(Row), ReturnStatus(ReturnStatus), ReturnValue(ReturnValue), Order(Order), } #[derive(Debug)] pub(crate) enum MessageType { Info, LoginAck, EnvChange, Done, DoneProc, DoneInProc, Row, NbcRow, Error, ColMetaData, ReturnStatus, ReturnValue, Order, } impl MessageType { pub(crate) fn get(buf: &mut Bytes) -> Result<Self, crate::error::Error> { Ok(match buf.get_u8() { 0x81 => MessageType::ColMetaData, 0xaa => MessageType::Error, 0xab => MessageType::Info, 0xac => MessageType::ReturnValue, 0xad => MessageType::LoginAck, 0xd1 => MessageType::Row, 0xd2 => MessageType::NbcRow, 0xe3 => MessageType::EnvChange, 0x79 => MessageType::ReturnStatus, 0xa9 => MessageType::Order, 0xfd => MessageType::Done, 0xfe => MessageType::DoneProc, 0xff => MessageType::DoneInProc, ty => { return Err(err_protocol!( "unknown value `0x{:02x?}` for message type in token stream", ty )); } }) } }