refactor(proto): reuse code in handshakes

This commit is contained in:
Jindřich Moravec 2023-12-23 00:52:53 +01:00
parent 7b2dce4dfb
commit c1744711d3
9 changed files with 111 additions and 88 deletions

View file

@ -1,6 +1,8 @@
use crate::handshake::errors::ServerHandshakeError;
use crate::handshake::request::HandshakeRequest;
use crate::handshake::response::HandshakeResponse;
use crate::message::backend::{
AuthenticationOkData, BackendKeyDataData, BackendMessage, ParameterStatusData,
AuthenticationOkData, BackendMessage,
ReadyForQueryData,
};
use crate::message::special::{SpecialMessage, StartupMessageData};
@ -11,10 +13,8 @@ use crate::writer::protowriter::ProtoFlush;
pub async fn do_server_handshake(
writer: &mut (impl BackendProtoWriter + ProtoFlush),
reader: &mut impl FrontendProtoReader,
name: &str,
process: i32,
secret: i32,
) -> Result<StartupMessageData, ServerHandshakeError> {
response: &HandshakeResponse,
) -> Result<HandshakeRequest, ServerHandshakeError> {
match &reader.peek_special_message().await? {
Some(msg @ SpecialMessage::SSLRequest) => {
reader.consume_special_message(msg).await?;
@ -40,21 +40,15 @@ pub async fn do_server_handshake(
.write_proto(BackendMessage::from(AuthenticationOkData { status: 0 }))
.await?;
writer
.write_proto(BackendMessage::from(ParameterStatusData {
name: "server_version".to_string().into(),
value: format!("16.0 ({name})").into(),
}))
.await?;
writer
.write_proto(BackendMessage::from(BackendKeyDataData { process, secret }))
.await?;
let messages: Vec<BackendMessage> = response.into();
for message in messages {
writer.write_proto(message).await?;
}
writer
.write_proto(BackendMessage::from(ReadyForQueryData { status: b'I' }))
.await?;
writer.flush().await?;
Ok(startup_message)
Ok(startup_message.into())
}