From 67af05ea4233a53760b8eb5d41c3149adbaddc92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jind=C5=99ich=20Moravec?= Date: Mon, 11 Dec 2023 16:50:33 +0100 Subject: [PATCH] feat(proto): add frontend message writer --- proto/src/writer/frontend.rs | 40 ++++++++++++++++++++++++++++++++++++ proto/src/writer/mod.rs | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 proto/src/writer/frontend.rs diff --git a/proto/src/writer/frontend.rs b/proto/src/writer/frontend.rs new file mode 100644 index 0000000..ba634cc --- /dev/null +++ b/proto/src/writer/frontend.rs @@ -0,0 +1,40 @@ +use crate::message::frontend::FrontendMessage; +use crate::writer::oneway::OneWayProtoWriter; +use async_trait::async_trait; + +#[async_trait] +pub trait FrontendProtoWriter: OneWayProtoWriter {} + +#[async_trait] +impl FrontendProtoWriter for W where W: OneWayProtoWriter {} + +#[cfg(test)] +mod tests { + use super::*; + use crate::message::frontend::QueryData; + 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(FrontendMessage::Query(QueryData { + query: "SLIME".into(), + })) + .await + .unwrap(); + + writer + .write_proto(FrontendMessage::Terminate) + .await + .unwrap(); + + assert_eq!( + writer.inner.buffer(), + vec![b'Q', 0, 0, 0, 10, b'S', b'L', b'I', b'M', b'E', 0, b'X', 0, 0, 0, 4] + ); + } +} diff --git a/proto/src/writer/mod.rs b/proto/src/writer/mod.rs index 58e55a6..3f16f05 100644 --- a/proto/src/writer/mod.rs +++ b/proto/src/writer/mod.rs @@ -1,4 +1,4 @@ - pub mod backend; +pub mod frontend; pub mod oneway; pub mod protowriter;