From 165f871324648b95bdf7a88594943edf5cf7b900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jind=C5=99ich=20Moravec?= Date: Fri, 15 Dec 2023 16:31:10 +0100 Subject: [PATCH] refactor(proto): replace anyhow with thiserror in handshake --- proto/src/handshake/errors.rs | 21 +++++++++++++++++++++ proto/src/handshake/mod.rs | 1 + proto/src/handshake/server.rs | 5 +++-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 proto/src/handshake/errors.rs diff --git a/proto/src/handshake/errors.rs b/proto/src/handshake/errors.rs new file mode 100644 index 0000000..90565ac --- /dev/null +++ b/proto/src/handshake/errors.rs @@ -0,0 +1,21 @@ +use thiserror::Error; +use tokio::io; +use crate::message::errors::ProtoDeserializeError; +use crate::reader::errors::{ProtoConsumeError, ProtoPeekError}; +use crate::writer::errors::ProtoWriteError; + +#[derive(Debug, Error)] +pub enum ServerHandshakeError { + #[error("startup message not found")] + MissingStartupMessage, + #[error("reading from socket 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), +} diff --git a/proto/src/handshake/mod.rs b/proto/src/handshake/mod.rs index 74f47ad..24a7408 100644 --- a/proto/src/handshake/mod.rs +++ b/proto/src/handshake/mod.rs @@ -1 +1,2 @@ pub mod server; +pub mod errors; diff --git a/proto/src/handshake/server.rs b/proto/src/handshake/server.rs index 660ea0c..b998c66 100644 --- a/proto/src/handshake/server.rs +++ b/proto/src/handshake/server.rs @@ -1,3 +1,4 @@ +use crate::handshake::errors::ServerHandshakeError; use crate::message::backend::{ AuthenticationOkData, BackendKeyDataData, BackendMessage, ParameterStatusData, ReadyForQueryData, @@ -13,7 +14,7 @@ pub async fn do_server_handshake( name: &str, process: i32, secret: i32, -) -> anyhow::Result { +) -> Result { match &reader.peek_special_message().await? { Some(msg @ SpecialMessage::SSLRequest) => { reader.consume_special_message(msg).await?; @@ -31,7 +32,7 @@ pub async fn do_server_handshake( data.clone() } _ => { - return Err(anyhow::anyhow!("Expected Startup Message")); + return Err(ServerHandshakeError::MissingStartupMessage); } };