pub struct PublishDone {
pub status_code: VarInt,
pub stream_count: VarInt,
pub reason_phrase: Vec<u8>,
}Expand description
PUBLISH_DONE (0x0B). The wire layout is unchanged from draft-19; what
draft-20 changed is the Stream Count sentinel, what the count includes,
and the removal of status code 0x3.
Fields§
§status_code: VarIntThe reason the publisher is ending the subscription.
Not validated against the registry, on decode or on encode, and that is
the draft’s instruction rather than an omission. Draft-20 Section 14:
“Receipt of an unknown error code in any error context (Session
Termination, REQUEST_ERROR, PUBLISH_DONE, or Data Stream Reset) MUST be
treated as equivalent to INTERNAL_ERROR for that context. An endpoint
MUST NOT close the session because it received an unknown error code in
a REQUEST_ERROR or PUBLISH_DONE.” Refusing the frame would take that
choice away from the caller, so an unassigned code is carried up and
super::error_codes::PublishDoneStatusCode::from_u64 answers None
for it.
That reaches 0x3 in particular. Draft-19 assigned it to
SUBSCRIPTION_ENDED; draft-20 removed the row and the behaviour behind
it together (Section 5.1.2: “A publisher does not end a subscription
solely because the Largest Object advances past the end of the current
Location Filter”). A draft-20 receiver reads a 0x3 as INTERNAL_ERROR.
stream_count: VarIntThe number of streams the publisher opened for this subscription.
Draft-20 Section 10.12 widens what is counted: the total now includes “streams that contained no Objects (e.g., an empty Subgroup) and including any fill fetch streams (see Section 5.1.3)”. Draft-19 counted no fill streams because it had none.
See publish_done_codes::STREAM_COUNT_UNKNOWN for the sentinel.
reason_phrase: Vec<u8>Trait Implementations§
Source§impl Clone for PublishDone
impl Clone for PublishDone
Source§fn clone(&self) -> PublishDone
fn clone(&self) -> PublishDone
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more