use std::fmt;
use qail_core::ast::Action;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EncodeError {
NullByte,
TooManyParameters(usize),
MessageTooLarge(usize),
InvalidMaxRows(i32),
UnsupportedAction(Action),
UnsafeExpression(String),
}
impl fmt::Display for EncodeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
EncodeError::NullByte => {
write!(
f,
"Value contains NULL byte (0x00) which is invalid in PostgreSQL"
)
}
EncodeError::TooManyParameters(count) => {
write!(f, "Too many parameters: {} (Limit is 32767)", count)
}
EncodeError::MessageTooLarge(size) => {
write!(
f,
"Message too large: {} bytes (Limit is {})",
size,
i32::MAX
)
}
EncodeError::InvalidMaxRows(v) => {
write!(f, "Invalid Execute max_rows: {} (must be >= 0)", v)
}
EncodeError::UnsupportedAction(action) => {
write!(f, "Unsupported action {:?} in AST-native encoder", action)
}
EncodeError::UnsafeExpression(expr) => {
write!(f, "Unsafe expression rejected: {}", expr)
}
}
}
}
impl std::error::Error for EncodeError {}