pub enum ParticipantSemanticError {
Unavailable,
Internal {
message: String,
},
ServiceFatal(ParticipantServiceFatal),
BindingTerminalAdmissionRefused {
error: BindingTerminalAdmitError,
},
BootDrainRefused {
conversation_id: ConversationId,
refusal: BootDrainRefusal,
candidate: String,
reason: String,
},
ConversationSealed {
conversation_id: ConversationId,
},
ConversationUnloadable {
conversation_id: ConversationId,
reason: String,
},
}Expand description
Non-wire semantic service failure.
A failure is terminal to the connection attempt. It is deliberately not
convertible to ServerValue, preventing the server from inventing a
lifecycle response when the protocol-owned transition did not produce one.
Variants§
The complete semantic service is not installed.
Internal
Durable state or a protocol invariant prevented semantic completion.
ServiceFatal(ParticipantServiceFatal)
A process-wide participant fatal has already latched.
BindingTerminalAdmissionRefused
A keyed binding-terminal candidate was refused, carrying the protocol’s own reason rather than a formatted description of it.
BindingTerminalAdmitError::Precedence is lane occupancy: the
conversation’s immutable-candidate lane already holds a terminal
awaiting its drain. That is a designed structural boundary, and a
caller deciding whether to park or to treat the refusal as corruption
must be able to tell it from the five genuine authority defects by
type.
Fields
error: BindingTerminalAdmitErrorExact protocol refusal reason.
BootDrainRefused
F8B R-BOOT-VERDICT: boot recovery could not empty a restored
conversation’s immutable-candidate lane, so the boot refuses HERE,
naming the conversation and the shape, instead of starting and dying
several collapses downstream on a retained Open it can never replay.
Fields
conversation_id: ConversationIdConversation whose restored lane refused its drain.
refusal: BootDrainRefusalTyped reason, so a consumer never discriminates on a substring.
ConversationSealed
F8B R-SEAL: the conversation is Closed — a Died-flavor drain erased its final enrollment token, so its log holds records, terminals and drain rows but no live identity can ever be reached through it again.
Enrollment answers with this NAMED refusal rather than falling through to a fresh identity, which would silently re-open a conversation whose history has already ended. On the wire it rides the existing semantic-error framing; a protocol-native response value with its own discriminant is deferred to a protocol-version leg (§9.8).
Fields
conversation_id: ConversationIdConversation whose closure refused the request.
ConversationUnloadable
CONTAINMENT: this one conversation’s durable state cannot be loaded, so this one conversation is refused. The node starts, every other conversation is served, and the refusal NAMES its subject.
Attribution is not decoration here, it is half the property. A node
that contains an unloadable conversation without naming it boots clean
and silently serves nothing on that conversation forever, which is
worse than the crash it replaced, because the crash was the only thing
telling anyone. The underlying failure travels as reason rather than
as a wrapped error because it is already a rendered diagnostic by the
time replay refuses it.
Fields
conversation_id: ConversationIdConversation whose durable state could not be loaded.
Trait Implementations§
Source§impl Clone for ParticipantSemanticError
impl Clone for ParticipantSemanticError
Source§fn clone(&self) -> ParticipantSemanticError
fn clone(&self) -> ParticipantSemanticError
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 ParticipantSemanticError
impl Debug for ParticipantSemanticError
Source§impl Display for ParticipantSemanticError
impl Display for ParticipantSemanticError
impl Eq for ParticipantSemanticError
Source§impl Error for ParticipantSemanticError
impl Error for ParticipantSemanticError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<ParticipantSemanticError> for ParticipantDispatchError
impl From<ParticipantSemanticError> for ParticipantDispatchError
Source§fn from(source: ParticipantSemanticError) -> Self
fn from(source: ParticipantSemanticError) -> Self
Source§impl PartialEq for ParticipantSemanticError
impl PartialEq for ParticipantSemanticError
impl StructuralPartialEq for ParticipantSemanticError
Auto Trait Implementations§
impl Freeze for ParticipantSemanticError
impl RefUnwindSafe for ParticipantSemanticError
impl Send for ParticipantSemanticError
impl Sync for ParticipantSemanticError
impl Unpin for ParticipantSemanticError
impl UnsafeUnpin for ParticipantSemanticError
impl UnwindSafe for ParticipantSemanticError
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.