#[non_exhaustive]pub struct HandoffOfferRecord {
pub handoff_id: String,
pub target_participant: String,
pub scope: String,
pub reason: String,
pub offered_by: String,
pub disposition: HandoffDisposition,
pub accepted_by: Option<String>,
pub declined_by: Option<String>,
pub outcome_reason: Option<String>,
pub offered_at_ms: i64,
pub suspended_ms_at_offer: i64,
}Expand description
One handoff offer as it stands in the session’s serialized mode_state.
#[non_exhaustive] (0.8.0, DECISIONS.md D7). This is persisted
coordination state, and every release that teaches the handoff mode
something new adds a field to it: 0.8.0 adds
suspended_ms_at_offer, one release after
offered_at_ms. With all-pub fields and no seal,
each of those is a constructible_struct_adds_field major break against
any external exhaustive struct literal — and
cargo semver-checks check-release --workspace --baseline-version 0.7.6
reports exactly that for suspended_ms_at_offer. release-plz.toml’s
semver_check = true turns it into a blocked release PR for all seven
lockstep crates. Sealing the struct once makes every future field
additive.
Fields stay pub and readable; only construction by struct literal from
another crate is refused. Within the workspace nothing changes. The
records are produced by the mode from accepted envelopes — there is no
supported way for a caller to mint one, which is why no constructor is
offered in its place.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.handoff_id: String§target_participant: String§scope: String§reason: String§offered_by: String§disposition: HandoffDisposition§accepted_by: Option<String>§declined_by: Option<String>§outcome_reason: Option<String>§offered_at_ms: i64§suspended_ms_at_offer: i64Session::accumulated_suspended_ms as it stood when the offer was
recorded — a snapshot, never a live read.
RFC-MACP-0010 §5.1(1): time the session spends Suspended must not
count toward the implicit-accept deadline, and the suspension accrued
since this offer is session.accumulated_suspended_ms minus this
value. Both terms are on the recorded timeline (suspend/resume replay
from the log), so the subtraction is replay-deterministic.
Legacy mode_state recorded before this field existed deserializes as
0 (serde default), which is also the value for an offer made on a
session that had never been suspended.
Trait Implementations§
Source§impl Clone for HandoffOfferRecord
impl Clone for HandoffOfferRecord
Source§fn clone(&self) -> HandoffOfferRecord
fn clone(&self) -> HandoffOfferRecord
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HandoffOfferRecord
impl Debug for HandoffOfferRecord
Source§impl<'de> Deserialize<'de> for HandoffOfferRecord
impl<'de> Deserialize<'de> for HandoffOfferRecord
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<HandoffOfferRecord, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<HandoffOfferRecord, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for HandoffOfferRecord
impl Serialize for HandoffOfferRecord
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for HandoffOfferRecord
impl RefUnwindSafe for HandoffOfferRecord
impl Send for HandoffOfferRecord
impl Sync for HandoffOfferRecord
impl Unpin for HandoffOfferRecord
impl UnsafeUnpin for HandoffOfferRecord
impl UnwindSafe for HandoffOfferRecord
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request