use crate::message::backend::BackendMessage; use crate::message::errors::ProtoDeserializeError; use crate::reader::errors::{ProtoConsumeError, ProtoPeekError, ProtoReadError}; use crate::writer::errors::ProtoWriteError; use thiserror::Error; use tokio::io; #[derive(Debug, Error)] pub enum ClientHandshakeError { #[error("unexpected response from server")] UnexpectedResponse, #[error("unexpected auth response")] UnexpectedAuthResponse(BackendMessage), #[error("socket communication failed")] Io(#[from] io::Error), #[error("writing message to socket failed")] Write(#[from] ProtoWriteError), #[error("reading message from socket failed")] Read(#[from] ProtoReadError), } #[derive(Debug, Error)] pub enum ServerHandshakeError { #[error("startup message not found")] MissingStartupMessage, #[error("socket communication failed")] Io(#[from] io::Error), #[error("deserialization of inner data failed")] Deserialize(#[from] ProtoDeserializeError), #[error("peeking special message failed")] Peek(#[from] ProtoPeekError), #[error("consuming special message failed")] Consume(#[from] ProtoConsumeError), #[error("writing message to socket failed")] Write(#[from] ProtoWriteError), }