elefant-client 0.1.0

A pure rust implementation of a postgres client that is independent of the executor runtime
Documentation
use crate::protocol::frame_reader::DecodeErrorError;
use std::error::Error;
use std::fmt::Display;

#[derive(Debug)]
pub enum PostgresMessageParseError {
    IoError(std::io::Error),
    UnknownMessage(u8),
    UnknownSubMessage {
        message_type: u8,
        length: i32,
        sub_message_type: i32,
    },
    UnexpectedMessageLength {
        message_type: u8,
        length: i32,
    },
    UnknownValueFormat(i16),
    UnknownCloseTarget(u8),
    UnknownDescribeTarget(u8),
    UnknownTransactionStatus(u8),
}

impl DecodeErrorError for PostgresMessageParseError {}

impl From<std::io::Error> for PostgresMessageParseError {
    fn from(e: std::io::Error) -> Self {
        PostgresMessageParseError::IoError(e)
    }
}

impl Display for PostgresMessageParseError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            PostgresMessageParseError::IoError(e) => write!(f, "IO error: {e}"),
            PostgresMessageParseError::UnknownMessage(m) => write!(f, "Unexpected message: {m}"),
            PostgresMessageParseError::UnknownSubMessage {
                message_type,
                length,
                sub_message_type,
            } => write!(
                f,
                "Unknown sub-message: {sub_message_type} for message {message_type} with length {length}"
            ),
            PostgresMessageParseError::UnexpectedMessageLength {
                message_type,
                length,
            } => write!(
                f,
                "Unexpected message length: {length} for {message_type}"
            ),
            PostgresMessageParseError::UnknownValueFormat(code) => write!(
                f,
                "Unknown value column format: {code}."
            ),
            PostgresMessageParseError::UnknownCloseTarget(code) => {
                write!(f, "Unknown close target: {code}. Expected 'S' or 'P'")
            },
            PostgresMessageParseError::UnknownDescribeTarget(code) => {
                write!(f, "Unknown describe target: {code}. Expected 'S' or 'P'")
            },
            PostgresMessageParseError::UnknownTransactionStatus(code) => {
                write!(f, "Unknown transaction status: {code}")
            },
        }
    }
}

impl Error for PostgresMessageParseError {}