Skip to main content

wasi_pg_client/protocol/
types.rs

1pub use postgres_protocol::Oid;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum FormatCode {
5    Text = 0,
6    Binary = 1,
7}
8
9impl FormatCode {
10    pub fn from_u16(value: u16) -> Option<Self> {
11        match value {
12            0 => Some(FormatCode::Text),
13            1 => Some(FormatCode::Binary),
14            _ => None,
15        }
16    }
17
18    pub fn to_u16(self) -> u16 {
19        self as u16
20    }
21
22    pub fn to_i16(self) -> i16 {
23        self as i16
24    }
25}
26
27impl TryFrom<i16> for FormatCode {
28    type Error = &'static str;
29
30    fn try_from(value: i16) -> Result<Self, Self::Error> {
31        match value {
32            0 => Ok(FormatCode::Text),
33            1 => Ok(FormatCode::Binary),
34            _ => Err("invalid format code"),
35        }
36    }
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum TransactionStatus {
41    Idle,
42    InTransaction,
43    Failed,
44}
45
46impl TransactionStatus {
47    pub fn from_u8(byte: u8) -> Option<Self> {
48        match byte {
49            b'I' => Some(TransactionStatus::Idle),
50            b'T' => Some(TransactionStatus::InTransaction),
51            b'E' => Some(TransactionStatus::Failed),
52            _ => None,
53        }
54    }
55
56    pub fn to_u8(self) -> u8 {
57        match self {
58            TransactionStatus::Idle => b'I',
59            TransactionStatus::InTransaction => b'T',
60            TransactionStatus::Failed => b'E',
61        }
62    }
63}
64
65pub mod message_type {
66    pub const STARTUP: u8 = 0;
67    pub const QUERY: u8 = b'Q';
68    pub const PARSE: u8 = b'P';
69    pub const BIND: u8 = b'B';
70    pub const EXECUTE: u8 = b'E';
71    pub const DESCRIBE: u8 = b'D';
72    pub const SYNC: u8 = b'S';
73    pub const CLOSE: u8 = b'C';
74    pub const FLUSH: u8 = b'H';
75    pub const TERMINATE: u8 = b'X';
76    pub const DATA_ROW: u8 = b'D';
77    pub const COMMAND_COMPLETE: u8 = b'C';
78    pub const ERROR_RESPONSE: u8 = b'E';
79    pub const READY_FOR_QUERY: u8 = b'Z';
80    pub const AUTHENTICATION_REQUEST: u8 = b'R';
81    pub const PARAMETER_STATUS: u8 = b'S';
82    pub const BACKEND_KEY_DATA: u8 = b'K';
83    pub const NOTICE_RESPONSE: u8 = b'N';
84    pub const NOTIFICATION_RESPONSE: u8 = b'A';
85    pub const ROW_DESCRIPTION: u8 = b'T';
86    pub const PARAMETER_DESCRIPTION: u8 = b't';
87    pub const PARSE_COMPLETE: u8 = b'1';
88    pub const BIND_COMPLETE: u8 = b'2';
89    pub const CLOSE_COMPLETE: u8 = b'3';
90    pub const NO_DATA: u8 = b'n';
91    pub const PORTAL_SUSPENDED: u8 = b's';
92    pub const EMPTY_QUERY_RESPONSE: u8 = b'I';
93    pub const COPY_DATA: u8 = b'd';
94    pub const COPY_DONE: u8 = b'c';
95    pub const COPY_FAIL: u8 = b'f';
96    pub const COPY_IN_RESPONSE: u8 = b'G';
97    pub const COPY_OUT_RESPONSE: u8 = b'H';
98}
99
100pub mod auth {
101    pub const OK: i32 = 0;
102    pub const KERBEROS_V5: i32 = 2;
103    pub const CLEARTEXT_PASSWORD: i32 = 3;
104    pub const MD5_PASSWORD: i32 = 5;
105    pub const SCM_CREDENTIAL: i32 = 6;
106    pub const GSS: i32 = 7;
107    pub const GSS_CONTINUE: i32 = 8;
108    pub const SSPI: i32 = 9;
109    pub const SASL: i32 = 10;
110    pub const SASL_CONTINUE: i32 = 11;
111    pub const SASL_FINAL: i32 = 12;
112}
113
114pub mod error_field {
115    pub const SEVERITY: u8 = b'S';
116    pub const SQLSTATE: u8 = b'C';
117    pub const MESSAGE: u8 = b'M';
118    pub const DETAIL: u8 = b'D';
119    pub const HINT: u8 = b'H';
120    pub const POSITION: u8 = b'P';
121    pub const INTERNAL_POSITION: u8 = b'p';
122    pub const INTERNAL_QUERY: u8 = b'q';
123    pub const WHERE: u8 = b'W';
124    pub const SCHEMA_NAME: u8 = b's';
125    pub const TABLE_NAME: u8 = b't';
126    pub const COLUMN_NAME: u8 = b'c';
127    pub const DATA_TYPE_NAME: u8 = b'd';
128    pub const CONSTRAINT_NAME: u8 = b'n';
129    pub const FILE: u8 = b'F';
130    pub const LINE: u8 = b'L';
131    pub const ROUTINE: u8 = b'R';
132}