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