pub enum DecodeRescheduleError {
UnresolvedEdgeList {
base: u32,
count: u32,
},
UnresolvedForkJoin {
join_kind: u8,
base: u32,
count: u32,
},
InvalidKind(u8),
}Expand description
Review fix (A2-part2 r2, binding rule 8): the typed failure
decode_reschedule returns instead of panicking for KIND_EDGE_LIST/
KIND_FORK_JOIN/any out-of-range kind byte.
Why this stops at a typed error rather than a full decode into
Suspend::WaitEvents’s multi-term shape / Suspend::ForkJoin, for these
two kinds specifically: RescheduleReqLayoutProposal::from_edge_list/
from_fork_join’s own doc comments are explicit that their payload is
only an ArenaRange reference into, respectively, “a static,
elaboration-time-built edge-term table” and “the engine’s dynamic
fork-child table” – never the concrete StateCellIds/SpawnSpecs
themselves. Per docs/CONTRACTS.md open question 8 and resolved decision
D1a, neither table is materialized by any wave-A track: no allocator
and no STATE-owned storage exists yet to resolve base/count against.
Fabricating a Suspend::WaitEvents/Suspend::ForkJoin from just a range
with no real backing data would be a silently-wrong Suspend (exactly
what this decoder’s own prior doc comment already refused to do) –
strictly worse than an honest, typed “cannot resolve this yet” error.
This variant carries the range/join_kind bytes through unchanged, so
the future task that finally builds those tables has everything it needs
without inventing a second wire format.
Variants§
UnresolvedEdgeList
kind == KIND_EDGE_LIST: a multi-term Suspend::WaitEvents whose
term data lives in the (not-yet-materialized) edge-term table this
ArenaRange would index into.
UnresolvedForkJoin
kind == KIND_FORK_JOIN: a Suspend::ForkJoin whose SpawnSpecs
live in the (not-yet-materialized) dynamic fork-child table this
ArenaRange would index into. join_kind is the raw
JoinKind-discriminant byte (RescheduleReqLayoutProposal:: fork_join_kind), carried through undecoded since decoding it further
buys nothing without the range it pairs with also being resolvable.
InvalidKind(u8)
Any byte outside KIND_DELAY..=KIND_DONE – an ABI/version mismatch;
build_eval_result (the only producer in this tree) never emits one.
Trait Implementations§
Source§impl Clone for DecodeRescheduleError
impl Clone for DecodeRescheduleError
impl Copy for DecodeRescheduleError
Source§impl Debug for DecodeRescheduleError
impl Debug for DecodeRescheduleError
impl Eq for DecodeRescheduleError
Source§impl PartialEq for DecodeRescheduleError
impl PartialEq for DecodeRescheduleError
impl StructuralPartialEq for DecodeRescheduleError
Auto Trait Implementations§
impl Freeze for DecodeRescheduleError
impl RefUnwindSafe for DecodeRescheduleError
impl Send for DecodeRescheduleError
impl Sync for DecodeRescheduleError
impl Unpin for DecodeRescheduleError
impl UnsafeUnpin for DecodeRescheduleError
impl UnwindSafe for DecodeRescheduleError
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.