#[non_exhaustive]pub enum DropMode {
Elide,
}Expand description
How Action::Drop removes an object.
MarkMissing — a zero-length object carrying status
ObjectDoesNotExist, the obvious default to reach for — is not in
this enum in 0.4.0. That status was removed from the registry in
draft-17, and drafts 15-19 do not validate the status on write, so a
naive implementation emits a code point those drafts do not define, on a
stream that round-trips green against itself. Dropping an object
therefore always removes its bytes; nothing here can leave a tombstone
behind.
The absence is a compile-time fact, not a promise:
use moqtap_proxy::action::DropMode;
// drop_mark_missing_is_not_constructible: no such variant in 0.4.0.
let _mode = DropMode::MarkMissing;The companion example below is what makes that compile_fail block
mean something: if the path or the import were wrong, the block would
still “pass” for the wrong reason, and this one would go red.
use moqtap_proxy::action::{Action, DropMode};
let mode = DropMode::Elide;
assert!(matches!(mode, DropMode::Elide));
let _action = Action::Drop(mode);Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Elide
Remove the object’s bytes from the wire, preserving every survivor’s absolute object ID.
Drafts 07-13, and fetch streams on drafts 07-14, encode absolute IDs, so this is pure byte deletion: every survivor is forwarded verbatim, including any non-minimally-encoded varint it arrived with. Drafts 14-19 delta-encode, so the one object following an elided run has its leading ID varint rewritten and nothing else; every later object is again forwarded verbatim, because the wire cursor re-converges after that one fix-up.
Eliding 2 from 0,1,2,3,4 yields a stream decoding to 0,1,3,4 —
not 0,1,2,3.
Refused when the object is index 0 of a stream whose subgroup ID is
defined as the first object’s ID
(ObjectMeta::subgroup_id
is None), because removing it silently redefines the subgroup ID
for the receiver. Also refused when the object carries a status,
which is conservatively treated as a boundary marker.