pub enum DriverError {
Io(Error),
Auth(String),
Protocol(String),
Server {
code: [u8; 5],
message: Box<str>,
detail: Option<Box<str>>,
hint: Option<Box<str>>,
position: Option<u32>,
},
Pool(String),
}Expand description
Error type for all bsql-driver-postgres operations.
Variants cover the four failure modes: I/O, authentication, wire protocol violations, server-reported errors, and pool management.
§Example
use bsql_driver_postgres::DriverError;
fn handle_error(err: DriverError) {
match err {
DriverError::Io(e) => eprintln!("network error: {e}"),
DriverError::Auth(msg) => eprintln!("auth failed: {msg}"),
DriverError::Protocol(msg) => eprintln!("protocol error: {msg}"),
DriverError::Server { code, message, position, .. } => {
let code_str = std::str::from_utf8(&code).unwrap_or("?????");
eprintln!("PG error [{code_str}]: {message} (pos: {position:?})");
}
DriverError::Pool(msg) => eprintln!("pool error: {msg}"),
}
}Variants§
Io(Error)
TCP/TLS I/O failure.
Auth(String)
Authentication failure (wrong password, unsupported mechanism, etc.).
Protocol(String)
Wire protocol violation (malformed message, unexpected message type, etc.).
Server
Server-reported error (invalid SQL, constraint violation, etc.).
Fields
code: [u8; 5]SQLSTATE error code — always exactly 5 ASCII bytes.
The SQL standard (ISO/IEC 9075) defines SQLSTATE as a 5-character
code: 2-character class + 3-character subclass. PostgreSQL follows
this strictly — every error response contains a 5-byte 'C' field.
Stored as [u8; 5] instead of String or Box<str> because:
- The length is fixed by the SQL standard (always 5, never more, never less)
- Eliminates a heap allocation per server error
- Shrinks
DriverErrorby 11 bytes (16-byte Box → 5-byte array) - Shrinks every
Result<T, DriverError>on the stack
Compare with string literals using byte strings: &err.code == b"23505"
Pool(String)
Connection pool error (exhaustion, misconfiguration).
Trait Implementations§
Source§impl Debug for DriverError
impl Debug for DriverError
Source§impl Display for DriverError
impl Display for DriverError
Source§impl Error for DriverError
impl Error for DriverError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()