feat(proto): add backend message writer
This commit is contained in:
parent
0a3683e2fa
commit
225f9e43d3
2 changed files with 60 additions and 0 deletions
59
proto/src/writer/backend.rs
Normal file
59
proto/src/writer/backend.rs
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
use crate::message::backend::BackendMessage;
|
||||||
|
use crate::writer::oneway::OneWayProtoWriter;
|
||||||
|
use crate::writer::protowriter::ProtoWriter;
|
||||||
|
use async_trait::async_trait;
|
||||||
|
use tokio::io::{AsyncWrite, AsyncWriteExt};
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
pub trait BackendProtoWriter: OneWayProtoWriter<BackendMessage> {
|
||||||
|
async fn write_ssl_reject(&mut self) -> anyhow::Result<()>;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl<W> BackendProtoWriter for ProtoWriter<W>
|
||||||
|
where
|
||||||
|
W: AsyncWrite + Unpin + Send,
|
||||||
|
{
|
||||||
|
async fn write_ssl_reject(&mut self) -> anyhow::Result<()> {
|
||||||
|
self.inner.write_u8(b'N').await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::message::backend::AuthenticationOkData;
|
||||||
|
use crate::writer::protowriter::ProtoWriter;
|
||||||
|
use tokio::io::BufWriter;
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_message_sequence() {
|
||||||
|
let writer = BufWriter::new(Vec::new());
|
||||||
|
let mut writer = ProtoWriter::new(writer);
|
||||||
|
|
||||||
|
writer
|
||||||
|
.write_proto(BackendMessage::AuthenticationOk(AuthenticationOkData {
|
||||||
|
status: 123,
|
||||||
|
}))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
writer.write_proto(BackendMessage::NoData).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
writer.inner.buffer(),
|
||||||
|
vec![b'R', 0, 0, 0, 8, 0, 0, 0, 123, b'n', 0, 0, 0, 4]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_ssl_reject() {
|
||||||
|
let writer = BufWriter::new(Vec::new());
|
||||||
|
let mut writer = ProtoWriter::new(writer);
|
||||||
|
|
||||||
|
writer.write_ssl_reject().await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(writer.inner.buffer(), vec![b'N']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
|
pub mod backend;
|
||||||
pub mod oneway;
|
pub mod oneway;
|
||||||
pub mod protowriter;
|
pub mod protowriter;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue