pub struct StreamedFrame<T: Resp3Frame> {
pub kind: FrameKind,
/* private fields */
}
Available on crate feature
resp3
only.Expand description
A helper struct for reading and managing streaming data types.
use redis_protocol::resp3::decode::streaming;
fn example() {
// decode the streamed array `[1,2]` one element at a time
let parts: Vec<Vec<u8>> = vec![
"*?\r\n".into(),
":1\r\n".into(),
":2\r\n".into(),
".\r\n".into(),
];
let (frame, _) = streaming::decode(&parts[0]).unwrap().unwrap();
assert!(frame.is_streaming());
let mut streaming = frame.into_streaming_frame().unwrap();
println!("Reading streaming {:?}", streaming.kind);
let (frame, _) = streaming::decode(&parts[1]).unwrap().unwrap();
assert!(frame.is_complete());
// add frames to the buffer until we reach the terminating byte sequence
streaming.add_frame(frame.into_complete_frame().unwrap());
let (frame, _) = streaming::decode(&parts[2]).unwrap().unwrap();
assert!(frame.is_complete());
streaming.add_frame(frame.into_complete_frame().unwrap());
let (frame, _) = streaming::decode(&parts[3]).unwrap().unwrap();
assert!(frame.is_complete());
streaming.add_frame(frame.into_complete_frame().unwrap());
assert!(streaming.is_finished());
// convert the buffer into one frame
let result = streaming.take().unwrap();
println!("{:?}", result); // OwnedFrame::Array { data: [1, 2], attributes: None }
}
Fields§
§kind: FrameKind
The data type being streamed.
Implementations§
Source§impl<T: Resp3Frame> StreamedFrame<T>
impl<T: Resp3Frame> StreamedFrame<T>
Sourcepub fn new(kind: FrameKind) -> Self
pub fn new(kind: FrameKind) -> Self
Create a new StreamedFrame
from the first section of data in a streaming response.
Sourcepub fn add_attributes(
&mut self,
attributes: T::Attributes,
) -> Result<(), RedisProtocolError>
pub fn add_attributes( &mut self, attributes: T::Attributes, ) -> Result<(), RedisProtocolError>
Add the provided attributes to the frame buffer.
Sourcepub fn take(&mut self) -> Result<T, RedisProtocolError>
pub fn take(&mut self) -> Result<T, RedisProtocolError>
Convert the internal buffer into one frame matching self.kind
, clearing the internal buffer.
Sourcepub fn is_finished(&self) -> bool
pub fn is_finished(&self) -> bool
Whether the last frame represents the terminating sequence at the end of a frame stream.
Trait Implementations§
Source§impl<T: Debug + Resp3Frame> Debug for StreamedFrame<T>
impl<T: Debug + Resp3Frame> Debug for StreamedFrame<T>
Source§impl<T: PartialEq + Resp3Frame> PartialEq for StreamedFrame<T>
impl<T: PartialEq + Resp3Frame> PartialEq for StreamedFrame<T>
impl<T: Eq + Resp3Frame> Eq for StreamedFrame<T>
impl<T: Resp3Frame> StructuralPartialEq for StreamedFrame<T>
Auto Trait Implementations§
impl<T> Freeze for StreamedFrame<T>where
T: Freeze,
impl<T> RefUnwindSafe for StreamedFrame<T>where
T: RefUnwindSafe,
impl<T> Send for StreamedFrame<T>where
T: Send,
impl<T> Sync for StreamedFrame<T>where
T: Sync,
impl<T> Unpin for StreamedFrame<T>where
T: Unpin,
impl<T> UnwindSafe for StreamedFrame<T>where
T: 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
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more