use std::convert::Infallible;
use super::DeferredParts;
use super::DeferredRegistration;
use super::DeferredRequest;
use crate::contract::TransportContractViolation;
use crate::error::TransportError;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(in crate::dispatch) enum RegistryFailure {
DuplicateRequest,
IdentityExhausted,
ParentCancelled,
SessionClosed,
DeadlineExpired,
#[cfg_attr(
not(test),
allow(dead_code, reason = "used by the test-only affine cleanup installer")
)]
CleanupInstallerRejected,
RegistryInvariant,
}
#[must_use]
pub enum DeferredRegistryRecovery<R, F = Infallible> {
None,
Request(DeferredRequest<R>),
Parts(DeferredParts),
Builder { builder: F, parts: DeferredParts },
}
#[must_use]
pub enum DeferredRegistryOutcome<R, E = Infallible, F = Infallible> {
Registered(DeferredRegistration),
DuplicateRequest(DeferredRegistryRecovery<R, F>),
IdentityExhausted(DeferredRegistryRecovery<R, F>),
ParentCancelled,
SessionClosed,
DeadlineExpired,
BuilderRejected { error: E, parts: DeferredParts },
ContractViolation {
violation: TransportContractViolation,
recovery: DeferredRegistryRecovery<R, F>,
},
OperationalFailure {
error: TransportError,
recovery: DeferredRegistryRecovery<R, F>,
},
}