sqlx_etorreborre_postgres/message/
mod.rs1use sqlx_core::bytes::Bytes;
2
3use crate::error::Error;
4use crate::io::Decode;
5
6mod authentication;
7mod backend_key_data;
8mod bind;
9mod close;
10mod command_complete;
11mod copy;
12mod data_row;
13mod describe;
14mod execute;
15mod flush;
16mod notification;
17mod parameter_description;
18mod parameter_status;
19mod parse;
20mod password;
21mod query;
22mod ready_for_query;
23mod response;
24mod row_description;
25mod sasl;
26mod ssl_request;
27mod startup;
28mod sync;
29mod terminate;
30
31pub use authentication::{Authentication, AuthenticationSasl};
32pub use backend_key_data::BackendKeyData;
33pub use bind::Bind;
34pub use close::Close;
35pub use command_complete::CommandComplete;
36pub use copy::{CopyData, CopyDone, CopyFail, CopyResponse};
37pub use data_row::DataRow;
38pub use describe::Describe;
39pub use execute::Execute;
40#[allow(unused_imports)]
41pub use flush::Flush;
42pub use notification::Notification;
43pub use parameter_description::ParameterDescription;
44pub use parameter_status::ParameterStatus;
45pub use parse::Parse;
46pub use password::Password;
47pub use query::Query;
48pub use ready_for_query::{ReadyForQuery, TransactionStatus};
49pub use response::{Notice, PgSeverity};
50pub use row_description::RowDescription;
51pub use sasl::{SaslInitialResponse, SaslResponse};
52pub use ssl_request::SslRequest;
53pub use startup::Startup;
54pub use sync::Sync;
55pub use terminate::Terminate;
56
57#[derive(Debug, PartialOrd, PartialEq)]
58#[repr(u8)]
59pub enum MessageFormat {
60 Authentication,
61 BackendKeyData,
62 BindComplete,
63 CloseComplete,
64 CommandComplete,
65 CopyData,
66 CopyDone,
67 CopyInResponse,
68 CopyOutResponse,
69 DataRow,
70 EmptyQueryResponse,
71 ErrorResponse,
72 NoData,
73 NoticeResponse,
74 NotificationResponse,
75 ParameterDescription,
76 ParameterStatus,
77 ParseComplete,
78 PortalSuspended,
79 ReadyForQuery,
80 RowDescription,
81}
82
83#[derive(Debug)]
84pub struct Message {
85 pub format: MessageFormat,
86 pub contents: Bytes,
87}
88
89impl Message {
90 #[inline]
91 pub fn decode<'de, T>(self) -> Result<T, Error>
92 where
93 T: Decode<'de>,
94 {
95 T::decode(self.contents)
96 }
97}
98
99impl MessageFormat {
100 pub fn try_from_u8(v: u8) -> Result<Self, Error> {
101 Ok(match v {
104 b'1' => MessageFormat::ParseComplete,
105 b'2' => MessageFormat::BindComplete,
106 b'3' => MessageFormat::CloseComplete,
107 b'C' => MessageFormat::CommandComplete,
108 b'd' => MessageFormat::CopyData,
109 b'c' => MessageFormat::CopyDone,
110 b'G' => MessageFormat::CopyInResponse,
111 b'H' => MessageFormat::CopyOutResponse,
112 b'D' => MessageFormat::DataRow,
113 b'E' => MessageFormat::ErrorResponse,
114 b'I' => MessageFormat::EmptyQueryResponse,
115 b'A' => MessageFormat::NotificationResponse,
116 b'K' => MessageFormat::BackendKeyData,
117 b'N' => MessageFormat::NoticeResponse,
118 b'R' => MessageFormat::Authentication,
119 b'S' => MessageFormat::ParameterStatus,
120 b'T' => MessageFormat::RowDescription,
121 b'Z' => MessageFormat::ReadyForQuery,
122 b'n' => MessageFormat::NoData,
123 b's' => MessageFormat::PortalSuspended,
124 b't' => MessageFormat::ParameterDescription,
125
126 _ => return Err(err_protocol!("unknown message type: {:?}", v as char)),
127 })
128 }
129}