sqlx_core/mssql/protocol/
message.rs

1use 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}