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;