feat(proto): add backend message reader
This commit is contained in:
parent
0a6e486005
commit
393bc0a751
2 changed files with 59 additions and 0 deletions
58
proto/src/reader/backend.rs
Normal file
58
proto/src/reader/backend.rs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
use crate::message::backend::BackendMessage;
|
||||
use crate::reader::oneway::OneWayProtoReader;
|
||||
use async_trait::async_trait;
|
||||
|
||||
#[async_trait]
|
||||
pub trait BackendProtoReader: OneWayProtoReader<BackendMessage> {}
|
||||
|
||||
#[async_trait]
|
||||
impl<R> BackendProtoReader for R where R: OneWayProtoReader<BackendMessage> {}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::message::backend::{
|
||||
AuthenticationOkData, BackendKeyDataData, BackendMessage, CommandCompleteData,
|
||||
};
|
||||
use crate::reader::oneway::OneWayProtoReader;
|
||||
use crate::reader::protoreader::ProtoReader;
|
||||
use std::io::Cursor;
|
||||
use tokio::io::{AsyncBufReadExt, BufReader};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_message_sequence() {
|
||||
let data = [
|
||||
b'R', 0, 0, 0, 8, 0, 0, 0, 123, b'K', 0, 0, 0, 12, 0, 0, 0, 111, 0, 0, 0, 222, b'C', 0,
|
||||
0, 0, 8, b'A', b'B', b'C', 0,
|
||||
];
|
||||
|
||||
let reader = BufReader::new(Cursor::new(&data));
|
||||
let mut reader = ProtoReader::new(reader, 1024);
|
||||
|
||||
let msg = reader.read_proto().await;
|
||||
assert!(matches!(
|
||||
msg,
|
||||
Ok(BackendMessage::AuthenticationOk(AuthenticationOkData {
|
||||
status: 123
|
||||
}))
|
||||
));
|
||||
|
||||
let msg = reader.read_proto().await;
|
||||
assert!(matches!(
|
||||
msg,
|
||||
Ok(BackendMessage::BackendKeyData(BackendKeyDataData {
|
||||
process: 111,
|
||||
secret: 222
|
||||
}))
|
||||
));
|
||||
|
||||
let msg = reader.read_proto().await;
|
||||
assert!(match msg {
|
||||
Ok(BackendMessage::CommandComplete(CommandCompleteData { tag })) =>
|
||||
tag.as_str() == "ABC",
|
||||
_ => false,
|
||||
});
|
||||
|
||||
let rest = reader.inner.fill_buf().await.unwrap();
|
||||
assert!(rest.is_empty());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
pub mod backend;
|
||||
pub mod frontend;
|
||||
pub mod oneway;
|
||||
pub mod protoreader;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue