pub enum RemoteCredentialAttachRecovery {
HealedFromReceipt {
value: ServerValue,
provenance: ParticipantResponseProvenance,
},
CommittedFresh {
value: ServerValue,
provenance: ParticipantResponseProvenance,
},
ReissueRequired {
result_generation: Option<Generation>,
current_generation: Generation,
reason: CredentialAttachReissueReason,
value: ServerValue,
provenance: ParticipantResponseProvenance,
},
Answered {
value: ServerValue,
provenance: ParticipantResponseProvenance,
},
AnswerRefused {
value: ServerValue,
reason: ClientInboundRefusalReason,
provenance: ParticipantResponseProvenance,
},
PushedBeforeAnswer {
value: ServerPush,
provenance: ParticipantResponseProvenance,
},
NotPending {
reason: LostCredentialAttachRefusalReason,
},
RerecordRefused {
request: ClientRequest,
reason: ClientOperationRecordRefusalReason,
},
TransportLost {
error: SdkError,
operation_fate: RemoteOperationTransportFate,
reconnect: RemoteReconnectPermitOutcome,
},
}Expand description
Outcome of driving one lost issued credential attach to a server answer.
The three healing-or-terminal arms are the exhaustive server answers to a same-token re-presentation, and the remainder are pass-throughs that hand back exactly what the crate or the transport reported.
Variants§
HealedFromReceipt
The server replayed its committed receipt and the crate applied it: the ROTATED credential is now held, and the orphan is over.
This is the designed healing window being spent. The value is the exact
replay the server sent — Bound when the receipt still names its origin
binding, UnboundReceipt when the tear killed the connection that held
it. Both carry the successor generation and the newly minted secret; the
difference is only whether the crate lands in Bound or Detached.
Fields
value: ServerValueExact applied replay value.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
CommittedFresh
The attach had never committed, so the re-presentation committed it now.
The kill landed in the window between the client’s send and the server’s commit. Nothing was lost and nothing needed replaying.
Fields
value: ServerValueExact applied AttachBound value.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
ReissueRequired
The committed outcome is permanently unanswerable; operator re-issue is the cure.
THE LOAD-BEARING TERMINAL. It is reached when the client was dead longer than the receipt window the server could hold open, which is policy (config-owned since #39) rather than failure. It is deliberately a state of its own rather than a generic refusal, because it is the exact point at which an embedder should dispose and re-enroll instead of retrying — and no amount of retrying will ever change it.
Fields
result_generation: Option<Generation>The generation the lost commit produced, when the server can still
prove it. None for StaleOrUnknownReceipt, which makes no commit
claim at all — the absence is the server’s honesty, not a gap here.
current_generation: GenerationThe generation the identity is live at now.
reason: CredentialAttachReissueReasonWhich of the two unanswerable classes this is.
value: ServerValueExact applied server value.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
Answered
The crate applied some other correlated answer, carried verbatim.
StaleAuthority, ParticipantUnknown, Retired and their kin arrive
here. The driver relabels nothing: an answer it does not classify is
handed over as the server sent it.
Fields
value: ServerValueExact applied server value.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
AnswerRefused
The crate refused the answer and retained its correlation unchanged.
Fields
value: ServerValueExact refused server value.
reason: ClientInboundRefusalReasonClosed crate refusal reason.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
PushedBeforeAnswer
A push arrived where the correlated answer was owed.
The delivery is handed back rather than dropped, and the live response correlation is still held, so a caller may simply keep receiving: the crate applies the answer whenever it does arrive.
Fields
value: ServerPushExact pushed value.
provenance: ParticipantResponseProvenanceConnection/attempt that delivered it.
NotPending
No issued credential-attach testimony was pending; nothing was consumed.
Fields
reason: LostCredentialAttachRefusalReasonClosed refusal reason.
RerecordRefused
The crate refused to re-record the retained envelope.
Fields
request: ClientRequestExact refused request.
reason: ClientOperationRecordRefusalReasonClosed crate refusal reason.
TransportLost
The probe could not be written; both fates were delegated to the crate.
Fields
operation_fate: RemoteOperationTransportFateCrate-owned operation-fate result.
reconnect: RemoteReconnectPermitOutcomeCrate-owned reconnect permit result.