Struct respite::RespReader
source · pub struct RespReader<Inner: AsyncRead + Unpin> { /* private fields */ }
Expand description
A wrapper for AsyncRead
to allow reading a RESP stream, mainly in three ways.
- Read each frame
- Read values, possibly made up of multiple frames
- Read requests like a Redis server
Implementations§
source§impl<Inner: AsyncRead + Unpin> RespReader<Inner>
impl<Inner: AsyncRead + Unpin> RespReader<Inner>
sourcepub fn new(inner: Inner, config: RespConfig) -> Self
pub fn new(inner: Inner, config: RespConfig) -> Self
Create a new RespReader
from a byte stream and a RespConfig
.
sourcepub async fn requests<F>(&mut self, f: F)where
F: FnMut(RespRequest),
pub async fn requests<F>(&mut self, f: F)where
F: FnMut(RespRequest),
Call f
for each RespRequest
received on this stream.
let input = "*2\r\n$1\r\na\r\n$1\r\nb\r\n".as_bytes();
let mut reader = RespReader::new(input, RespConfig::default());
let mut requests = Vec::new();
reader.requests(|request| { requests.push(request); }).await;
assert!(matches!(requests[0], RespRequest::Argument(_)));
assert!(matches!(requests[1], RespRequest::Argument(_)));
assert!(matches!(requests[2], RespRequest::End));
sourcepub async fn value(&mut self) -> Result<Option<RespValue>, RespError>
pub async fn value(&mut self) -> Result<Option<RespValue>, RespError>
Read the next RespValue
from the stream.
let input = "$3\r\nhi!\r\n".as_bytes();
let mut reader = RespReader::new(input, RespConfig::default());
let frame = reader.value().await.unwrap();
assert_eq!(frame, Some(RespValue::String("hi!".into())));
sourcepub async fn frame(&mut self) -> Result<Option<RespFrame>, RespError>
pub async fn frame(&mut self) -> Result<Option<RespFrame>, RespError>
Read the next RespFrame
from the stream.
let input = "$3\r\nhi!\r\n".as_bytes();
let mut reader = RespReader::new(input, RespConfig::default());
let frame = reader.frame().await.unwrap();
assert_eq!(frame, Some(RespFrame::BlobString("hi!".into())));
Trait Implementations§
Auto Trait Implementations§
impl<Inner> Freeze for RespReader<Inner>where
Inner: Freeze,
impl<Inner> RefUnwindSafe for RespReader<Inner>where
Inner: RefUnwindSafe,
impl<Inner> Send for RespReader<Inner>where
Inner: Send,
impl<Inner> Sync for RespReader<Inner>where
Inner: Sync,
impl<Inner> Unpin for RespReader<Inner>
impl<Inner> UnwindSafe for RespReader<Inner>where
Inner: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more