pub struct InvokeRespChunk<'a> { /* private fields */ }Expand description
First (possibly only) response chunk of an invoke
transaction. Returned by InvokeSender::tx once the peer has
ACK-ed the request.
The borrowed response method gives zero-copy
access to the parsed InvokeResp backed by the exchange’s RX
buffer; the buffer stays valid until complete
is called.
For multi-chunk responses (the server signals more_chunks=true),
complete returns Some(next_chunk) so the
caller can iterate; otherwise it returns None and drops the
exchange.
Per Matter Core spec, a server MAY reply to a command
declared with DefaultSuccess (no explicit response struct) by
sending a plain StatusResponse(Success) instead of a full
InvokeResponse. In that case the chunk is status-only:
response returns None, and
complete is terminal (returns None).
Implementations§
Source§impl<'a> InvokeRespChunk<'a>
impl<'a> InvokeRespChunk<'a>
Sourcepub fn is_status_only(&self) -> bool
pub fn is_status_only(&self) -> bool
Whether the peer replied with StatusResponse(Success)
(DefaultSuccess command) rather than a real InvokeResponse.
In that case response returns None.
Sourcepub fn response(&self) -> Result<Option<InvokeResp<'_>>, Error>
pub fn response(&self) -> Result<Option<InvokeResp<'_>>, Error>
Borrowed access to the parsed InvokeResp for this chunk —
None if the chunk is status-only (see [is_status_only]).
The returned value points into the exchange’s RX buffer, so
its lifetime is the borrow of this InvokeRespChunk.
Sourcepub async fn complete(self) -> Result<Option<InvokeRespChunk<'a>>, Error>
pub async fn complete(self) -> Result<Option<InvokeRespChunk<'a>>, Error>
ACK the current chunk and, if the server signalled
more_chunks=true, fetch + parse the next chunk and return
it as Some(next). Otherwise (final chunk, or status-only)
drop the exchange and return None.
Chunking flow control (Matter Core): on receipt of
any InvokeResponseMessage with MoreChunkedResponses=true,
the receiver SHALL reply with StatusResponse(Success) and
the sender SHALL await that ACK before transmitting the next
chunk. On the final chunk (MoreChunks=false) no trailer
is sent — per spec the SuppressResponse field on an
InvokeResponseMessage is ignored by the client, and Matter
“does not support responses to InvokeResponse actions” at the
action layer. So the terminal-chunk branch is MRP-ack only,
regardless of the SuppressResponse value the server echoed.
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for InvokeRespChunk<'a>
impl<'a> !Send for InvokeRespChunk<'a>
impl<'a> !Sync for InvokeRespChunk<'a>
impl<'a> !UnwindSafe for InvokeRespChunk<'a>
impl<'a> Freeze for InvokeRespChunk<'a>
impl<'a> Unpin for InvokeRespChunk<'a>
impl<'a> UnsafeUnpin for InvokeRespChunk<'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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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