sqlx_postgres/message/
ready_for_query.rs1use sqlx_core::bytes::Bytes;
2
3use crate::error::Error;
4use crate::message::{BackendMessage, BackendMessageFormat};
5
6#[derive(Debug)]
7#[repr(u8)]
8pub enum TransactionStatus {
9 Idle = b'I',
11
12 Transaction = b'T',
14
15 Error = b'E',
17}
18
19#[derive(Debug)]
20pub struct ReadyForQuery {
21 pub transaction_status: TransactionStatus,
22}
23
24impl BackendMessage for ReadyForQuery {
25 const FORMAT: BackendMessageFormat = BackendMessageFormat::ReadyForQuery;
26
27 fn decode_body(buf: Bytes) -> Result<Self, Error> {
28 let status = match buf[0] {
29 b'I' => TransactionStatus::Idle,
30 b'T' => TransactionStatus::Transaction,
31 b'E' => TransactionStatus::Error,
32
33 status => {
34 return Err(err_protocol!(
35 "unknown transaction status: {:?}",
36 status as char
37 ));
38 }
39 };
40
41 Ok(Self {
42 transaction_status: status,
43 })
44 }
45}
46
47#[test]
48fn test_decode_ready_for_query() -> Result<(), Error> {
49 const DATA: &[u8] = b"E";
50
51 let m = ReadyForQuery::decode_body(Bytes::from_static(DATA))?;
52
53 assert!(matches!(m.transaction_status, TransactionStatus::Error));
54
55 Ok(())
56}