#[non_exhaustive]pub enum Frame<'a> {
Show 15 variants
Simple(&'a [u8]),
Error(&'a [u8]),
BlobError(&'a [u8]),
Int(i64),
Bulk(&'a [u8]),
Null,
Double(f64),
Bool(bool),
BigNumber(&'a [u8]),
Verbatim {
format: &'a [u8],
text: &'a [u8],
},
Array(Vec<Frame<'a>>),
Map(Vec<(Frame<'a>, Frame<'a>)>),
Set(Vec<Frame<'a>>),
Push(Vec<Frame<'a>>),
Attribute(Vec<(Frame<'a>, Frame<'a>)>),
}Expand description
One reply, borrowed from the buffer it arrived in.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Simple(&'a [u8])
+, a one line string.
Error(&'a [u8])
-, a one line error, prefix included.
BlobError(&'a [u8])
!, RESP3’s error that may span lines.
Int(i64)
:, an integer.
Bulk(&'a [u8])
$, a length prefixed string.
Null
A missing value: RESP2’s $-1 or *-1, or RESP3’s _.
The two RESP2 spellings decode to the same thing on purpose. A caller
that needs to tell them apart is testing the protocol rather than the
reply, and crate::Out is where that is tested.
Double(f64)
,, a double.
Bool(bool)
#, a boolean.
BigNumber(&'a [u8])
(, an integer too large for i64, as its digits.
Verbatim
=, a string with a three byte format tag.
Array(Vec<Frame<'a>>)
*, an ordered list.
Map(Vec<(Frame<'a>, Frame<'a>)>)
%, pairs in the order they were sent.
Set(Vec<Frame<'a>>)
~, an unordered list.
Push(Vec<Frame<'a>>)
>, an out of band message: pub/sub delivery or a cache invalidation.
Attribute(Vec<(Frame<'a>, Frame<'a>)>)
|, metadata that belongs to the frame after it.
Returned on its own rather than attached, because attaching it would mean every caller matching on a reply has to look through a wrapper. A caller that cares reads the next frame; a caller that does not can drop it, which is what RESP3 says clients may do.
Implementations§
Trait Implementations§
impl<'a> StructuralPartialEq for Frame<'a>
Auto Trait Implementations§
impl<'a> Freeze for Frame<'a>
impl<'a> RefUnwindSafe for Frame<'a>
impl<'a> Send for Frame<'a>
impl<'a> Sync for Frame<'a>
impl<'a> Unpin for Frame<'a>
impl<'a> UnsafeUnpin for Frame<'a>
impl<'a> UnwindSafe for Frame<'a>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> ⓘ
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> ⓘ
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