pub enum ValidationError {
Show 62 variants
InvalidRunAnnotation {
message: String,
},
ClusterRepoNamespaceForbidden {
namespace: String,
},
ConsumerNamespaceNotAllowed {
namespace: String,
repo: String,
},
DiscoveredMustRetain {
got: String,
},
DiscoveredCannotSetOnScheduleDelete {
origin: &'static str,
got: String,
},
RestoreSourceRepositoryRequired,
InlineRetentionForbidden {
field: String,
},
InvalidCron {
expr: String,
reason: String,
},
InvalidTimezone {
name: String,
},
MutuallyExclusive {
a: String,
b: String,
context: String,
},
MissingRequiredField {
field: String,
},
InvalidFieldValue {
field: String,
reason: String,
},
IdentityExprCompile {
expr: String,
reason: String,
},
IdentityExprEval {
expr: String,
reason: String,
},
IdentityExprType {
expr: String,
got: String,
},
InsecureServerNotAcknowledged,
InvalidServerPort {
port: u16,
},
ServerNamespaceRequired,
SelectorLabelsUnavailable {
namespace: String,
repo: String,
},
Immutable {
field: String,
},
IdentityCollision {
identity: String,
conflict: String,
repo: String,
},
IdentityComponentInvalid {
field: String,
value: String,
reason: String,
},
IdentitySourcePathInvalid {
field: String,
value: String,
reason: String,
},
ClusterNameInvalid {
value: String,
reason: String,
},
IdentityWouldFork {
old: String,
new: String,
},
IdentityWouldForkInRepository {
repo: String,
old: String,
new: String,
},
RepositoryIdentityWouldFork {
consumers: Vec<String>,
},
SuccessExprCompile {
expr: String,
reason: String,
},
SuccessExprEval {
expr: String,
reason: String,
},
SuccessExprType {
expr: String,
got: String,
},
PreflightExprCompile {
expr: String,
reason: String,
},
PreflightExprEval {
expr: String,
reason: String,
},
PreflightExprType {
expr: String,
got: String,
},
ReplicationDestinationSameAsSource {
backend: String,
},
ReplicationMountPathCollision {
path: String,
},
SnapshotReplicationSelfTarget {
kind: String,
name: String,
},
SnapshotReplicationSameStorage {
source_ref: String,
destination_ref: String,
backend: String,
},
SnapshotReplicationOverlapMirrorSource {
identities: Vec<String>,
},
EmptyIdentityMatcher {
field: String,
},
RetentionKeepsNothing,
PolicyRepositoryExactlyOne {
got: &'static str,
},
PolicyRepositoriesDuplicate {
key: String,
first: usize,
second: usize,
},
PolicySingleRepositoryRequired,
PolicyHooksWithRepositories,
SnapshotPinNotInPolicy {
pin: String,
policy: String,
valid: String,
},
MultiRepoSnapshotUnpinned {
policy: String,
},
SnapshotRepositoryUnresolvable {
snapshot: String,
},
RestoreRepositoryNotInPolicy {
given: String,
policy: String,
valid: String,
},
RestoreRepositorySelectionRequired {
policy: String,
valid: String,
},
MaintenanceNamespaceOnNamespacedRepo {
namespace: String,
},
ForeignSnapshotsRequiresCluster,
ForeignSnapshotsChoiceRequired,
SeedRequiresMountableRepository {
path: String,
},
SeedSourceRequiresMountableBackend {
path: String,
},
SeedOnReadOnlyRepository,
SeedCreateOptionsInert {
fields: Vec<String>,
},
SeedTuningNotApplicable {
field: String,
expected_source: String,
actual_source: String,
},
SeedSourceSameAsRepository {
backend: String,
},
SeedMountPathCollision {
path: String,
},
SeedSourceSelfReference {
kind: String,
name: String,
},
SeedSourceSecretNamespaceForbidden {
secret: String,
namespace: String,
},
SeedSourceSecretNamespaceMismatch {
secret: String,
namespace: String,
repository_namespace: String,
},
}Expand description
A single cross-field validation failure. PartialEq so tests can assert the
exact variant; messages are written for an end user reading a rejected apply.
Variants§
InvalidRunAnnotation
The maintenance run-requested/run-mode annotations are malformed
(message produced by crate::maintenance::parse_run_annotations,
already what/why/fix).
ClusterRepoNamespaceForbidden
A Repository/ClusterRepository’s own credential refs, or a consumer’s
repository.namespace, set a namespace that the variant forbids.
For kind: ClusterRepository, repository.namespace MUST be absent
(ADR §3.2/§3.3) — the reference is cluster-scoped by name alone.
ConsumerNamespaceNotAllowed
A consumer namespace is not permitted by the target ClusterRepository’s
allowedNamespaces tenancy gate (ADR §3.2/§4.3).
Fields
DiscoveredMustRetain
A Snapshot with origin: discovered tried to set a deletionPolicy other
than Retain. Discovered snapshots are forced Retain so the operator
never deletes data it did not create (ADR §4.5).
DiscoveredCannotSetOnScheduleDelete
A Snapshot with origin: discovered or origin: adopted set
spec.onScheduleDelete. Neither has an owning SnapshotSchedule for the
field to apply to: a discovered snapshot’s owner is a repository, and an
adopted snapshot’s owner is the SnapshotPolicy it was re-attached to —
a stamped cascade policy on either is meaningless, so it is forbidden,
exactly like a non-Retain deletionPolicy (Self::DiscoveredMustRetain).
Fields
RestoreSourceRepositoryRequired
A Restore with source.identity did not set spec.repository. Identity
sources cannot derive a repository, so it is required (ADR §3.6/§4.6).
InlineRetentionForbidden
A Repository/ClusterRepository spec carried kopia-side (repo-level)
retention policy fields, which conflict with CR-driven GFS retention and
risk double-deletion (ADR §4.4 exclusivity).
InvalidCron
A cron expression failed to parse with the same parser the controller uses at runtime, so it is rejected at apply time rather than at first reconcile (ADR §4.1).
Fields
InvalidTimezone
A schedule’s timezone is not a recognized IANA timezone name (e.g. a typo
like America/Chicgo), rejected at apply time rather than silently falling
back to UTC at reconcile.
MutuallyExclusive
Two fields that may not both be set were both set (e.g. a Source with
both pvc and pvcSelector).
Fields
MissingRequiredField
A required field (or “at least one of” surface) was empty.
InvalidFieldValue
A field was set but its value is malformed (e.g. an NFS export path that is not absolute). The schema can’t express the constraint, so the webhook does.
Fields
IdentityExprCompile
A Repository/ClusterRepository identityDefaults CEL expression
(hostnameExpr / usernameExpr) failed to compile (a syntax error, or
it exceeds the length budget). Surfaced at admission so a bad expression
never reaches status (ADR-0004 §5).
Fields
IdentityExprEval
A Repository/ClusterRepository identityDefaults CEL expression
referenced a variable outside its environment (e.g. a typo), or otherwise
failed to evaluate at admission (ADR-0004 §5). The environment is
namespace, policyName, labels, annotations, cluster.
Fields
IdentityExprType
A Repository/ClusterRepository identityDefaults CEL expression
evaluated to a non-string value. hostnameExpr/usernameExpr must return
a string (ADR-0004 §5).
Fields
InsecureServerNotAcknowledged
spec.server.auth.insecure was selected without acknowledgeInsecure: true.
The no-auth server exposes full read/write/delete of the repository with no
login, so it must be explicitly acknowledged (server addendum).
InvalidServerPort
spec.server.service.port was set to an invalid value (0).
ServerNamespaceRequired
A ClusterRepository.spec.server did not set the required target namespace.
A label selector was supplied as the tenancy gate but the caller could not provide the consumer namespace’s labels to match against. We fail closed (deny) rather than guess (ADR §3.2 — the webhook never trusts unfiltered input).
Immutable
An UPDATE changed a repository field that is fixed at repository-creation
time (encryption, create.splitter, create.hash, create.encryption).
Kopia bakes these into the repository’s on-disk format, so they cannot change
after creation — the webhook rejects the edit rather than silently ignoring it
(ADR-0005 §7).
IdentityCollision
A SnapshotPolicy’s resolved kopia identity (username@hostname[:path])
collides with an already-admitted SnapshotPolicy’s identity in the same
repository. Two recipes interleaving snapshots into one kopia identity corrupts
the snapshot history, so the webhook rejects the second one (ADR-0005 §6).
Fields
IdentityComponentInvalid
A kopia identity component (username or hostname) — whether an explicit
spec.identity override or the value an identityDefaults CEL expression
resolved to — contains a character that breaks kopia’s
username@hostname:path contract. kopia parses a source on the first @
and first : with no escaping, so an embedded @, :, ASCII whitespace,
or control character silently misparses the identity into a different one
(or makes the snapshot un-findable on snapshot list --source). Rejected at
admission/resolution so it never reaches a mover Job. Shape-only — every other
character (dots, dashes, slashes, unicode letters) is allowed.
Fields
IdentitySourcePathInvalid
A kopia identity sourcePath is malformed — empty, or it contains a newline
or an ASCII control character. The path is everything after the first : in
username@hostname:path; it may legitimately contain spaces and further :,
but not control characters, and must be non-empty when set.
Fields
ClusterNameInvalid
A Repository/ClusterRepository identityDefaults.cluster is not a
valid RFC 1123 label, or contains a .. cluster is appended onto the namespace as
<namespace>.<cluster> for the default hostname, and
crate::identity::classify_hostname splits that hostname back apart at
the FIRST . — a cluster value with an embedded dot would just shift
which suffix classifies as “own cluster” rather than error, so the value is
rejected outright at admission instead of letting classification silently
disagree with intent.
Fields
IdentityWouldFork
An UPDATE to a SnapshotPolicy would change its resolved kopia identity
(username@hostname, or a source’s path) while the policy already has snapshot
history. New snapshots would land under the new kopia source: Kopiur’s own GFS
retention pools ALL of a policy’s Snapshot CRs regardless of identity, so the
old and new lineages don’t get independent retention — they compete for the same
keepLatest/keepDaily/etc. buckets in one merged timeline, and restore/verify/
fromPolicy resolve only the new identity (the old lineage stays reachable via
Restore.source.identity). Rejected unless the change is acknowledged with the
kopiur.home-operations.com/allow-identity-change annotation
(crate::consts::ALLOW_IDENTITY_CHANGE_ANNOTATION).
Fields
IdentityWouldForkInRepository
The multi-repository analogue of Self::IdentityWouldFork: an UPDATE
to a SnapshotPolicy would change the kopia identity it resolves to
in one of its member repositories (each member resolves its own
identity under that repository’s identityDefaults) while the policy
already has snapshot history. The message names WHICH repository’s
lineage would fork — with N members, the other N-1 may be unaffected.
Same acknowledgement release as the single-repo variant.
Fields
RepositoryIdentityWouldFork
An UPDATE to a Repository/ClusterRepository’s identityDefaults
(cluster, hostnameExpr, or usernameExpr) would silently re-identify
every consumer SnapshotPolicy that resolves through those defaults —
identity is re-resolved from the LIVE repository on every reconcile/backup
(nothing about a repository’s defaults is pinned the way a policy’s own
spec.identity is), so this edit changes what each affected policy
resolves to on its very next backup with no per-policy edit to
acknowledge it. Exactly like Self::IdentityWouldFork, new snapshots
would land under a new kopia lineage while the old lineage’s Snapshot
CRs keep competing with it in the same merged GFS retention timeline
(Kopiur pools a policy’s CRs regardless of identity, so nothing is
independently retained) — but here it happens fleet-wide in one apply.
Rejected unless the repository carries the
kopiur.home-operations.com/allow-identity-change annotation
(crate::consts::ALLOW_IDENTITY_CHANGE_ANNOTATION).
Fields
SuccessExprCompile
A verification successExpr (ADR-0005 §4/§15) failed to compile (a
syntax error, or it exceeds the length budget). Surfaced at admission.
Fields
SuccessExprEval
A verification successExpr referenced a variable outside its environment
(e.g. a typo), or otherwise failed to evaluate (ADR-0005 §4/§15). The
environment is stats{files,bytes,errors}, snapshot, restored.
Fields
SuccessExprType
A verification successExpr evaluated to a non-bool value. A successExpr
is a pass/fail predicate and must return a bool (ADR-0005 §4/§15).
Fields
PreflightExprCompile
A SnapshotPolicy.spec.preflight check expression failed to compile (CEL
syntax error, or it exceeds the length budget). Surfaced at admission.
Fields
PreflightExprEval
A preflight check expression referenced a variable outside its environment
(e.g. a typo), or otherwise failed to evaluate. The environment is the
repository and maintenance maps.
Fields
PreflightExprType
A preflight check expression evaluated to a non-bool value. A preflight check is a pass/fail predicate and must return a bool.
Fields
ReplicationDestinationSameAsSource
A RepositoryReplication’s destination backend is identical to its
source repository’s backend (ADR-0005 §13(d)) — replicating a repository to
itself is a no-op (or worse, a loop). The webhook rejects it.
ReplicationMountPathCollision
Two distinct filesystem repositories in one replication share the same
in-pod backend.path, so the mover Job would carry two volumeMounts at
one mountPath — an invalid pod spec that otherwise fails only at
Job-create time. Different volumes make them pass the self-target check;
the mount topology is the problem.
SnapshotReplicationSelfTarget
A SnapshotReplication’s sourceRef and destinationRef are the same
reference (same kind, name, and effective namespace) — copying a
repository’s snapshots into itself is a no-op at best and duplicates
every manifest at worst. The pure validator catches the literal same-ref
case; the webhook additionally rejects two different refs that resolve
to the same storage target (backend_target_key).
Fields
SnapshotReplicationSameStorage
A SnapshotReplication’s sourceRef and destinationRef are two
different references that resolve to the same storage target
(backend_target_key — e.g. a namespaced Repository and a
ClusterRepository both pointing at one bucket+prefix). The pure
validator’s Self::SnapshotReplicationSelfTarget catches the literal
same-ref case; this is the webhook’s resolved-backend backstop.
Fields
SnapshotReplicationOverlapMirrorSource
A SnapshotReplication combines pruning: mirrorSource with a
spec.selection that overlaps kopia identities the DESTINATION’s own
SnapshotPolicys write directly. Replicated copies would interleave
with directly-written snapshots in those identities’ histories, and
mirror-source pruning deletes any copy whose (identity, startTime)
vanished from the source — so a source-side deletion cascades into
identities the destination does NOT merely mirror. Rejected as a
data-loss combination.
Fields
EmptyIdentityMatcher
A SnapshotReplication identity matcher set none of
username/hostname/sourcePath. An empty matcher constrains nothing —
in an include list it would silently select EVERY identity, and in an
exclude list it would silently exclude everything — so the intent must
be spelled out instead.
Fields
RetentionKeepsNothing
A SnapshotReplication pruning.retention block set no keep* bucket.
A retention that keeps nothing would prune every replicated copy on the
next run — almost certainly a typo’d field name, so it is rejected
rather than honored.
PolicyRepositoryExactlyOne
A SnapshotPolicy set neither or both of spec.repository /
spec.repositories. Exactly one of the two shapes must be present —
neither leaves the recipe with no target at all, and both leaves it
ambiguous whether the single ref is a ninth member or a leftover.
Mirrors the spec-level CEL rule on SnapshotPolicySpec.
PolicyRepositoriesDuplicate
SnapshotPolicy.spec.repositories lists the same repository twice
(after normalizing kind + effective namespace + name). Each run would
back the source into that repository twice under one kopia identity —
two interleaved writers corrupting one snapshot history, exactly the
hazard the identity-collision guard exists to prevent.
Fields
PolicySingleRepositoryRequired
A code path that genuinely requires a SINGLE repository (the
single_repository_ref
accessor’s Multi arm) was handed a multi-repository policy. This is
NOT an admission refusal — spec.repositories is fully supported; a
multi-repo policy’s per-repository work is addressed through each
child Snapshot’s spec.repository pin, never through a policy-level
“the one repository” read, so any consumer still asking for one fails
loudly here instead of silently picking repository #1.
PolicyHooksWithRepositories
A SnapshotPolicy combines spec.hooks with spec.repositories.
Hooks quiesce the workload around ONE capture; with N concurrent
fan-out children the first finisher runs the after-snapshot (thaw)
hooks while the other N-1 movers are still reading — voiding the
quiesce guarantee — and serializing the children would multiply the
freeze window by N. Refused as an unsatisfiable consistency contract.
SnapshotPinNotInPolicy
A Snapshot’s repository pin (spec.repository) names a repository
that is not in its SnapshotPolicy’s repository set — either the pin is
wrong (a hand-written CREATE with a typo, refused at admission) or the
recipe was edited out from under an existing Snapshot’s mint-time pin
(terminal for that CR). Proceeding against any OTHER repository would
silently act on the wrong backend, and guessing is the one thing a
backup operator must never do.
Fields
MultiRepoSnapshotUnpinned
A Snapshot referencing a MULTI-repository SnapshotPolicy carries no
spec.repository pin, so there is no way to know which of the N
repositories this run targets. Raised both at admission (refusing to
CREATE such a child) and as the controller-side backstop for stored
rows; picking repository #1 silently is never an option.
SnapshotRepositoryUnresolvable
A Snapshot with no policyRef (e.g. a SnapshotReplication copy CR
or a discovered row) has no derivable repository: neither a
status.resolved.repository pin, nor a spec.repository pin, nor a
Repository/ClusterRepository owner reference.
RestoreRepositoryNotInPolicy
A fromPolicy restore names an explicit spec.repository that is not a
member of the referenced SnapshotPolicy’s repository set — most likely
a typo, and honoring it would silently read a repository the recipe
never wrote to.
Fields
RestoreRepositorySelectionRequired
A fromPolicy restore references a MULTI-repository SnapshotPolicy
without selecting which repository to read — the operator must never
guess (the N repositories are independent captures that can diverge).
Fields
MaintenanceNamespaceOnNamespacedRepo
A namespaced Repository set spec.maintenance.namespace, which only
applies to a cluster-scoped ClusterRepository (a namespaced
Repository’s managed Maintenance always lives in the repository’s own
namespace). ADR §3.7.
ForeignSnapshotsRequiresCluster
catalog.foreignSnapshots is set, but there is no cluster identity to
classify a snapshot’s origin against — Ignore/Fallback decide what
to do with a snapshot crate::identity::classify_hostname classifies
as another cluster’s, and that classification is undecidable without
identityDefaults.cluster. Fires on either repository kind (Repository
or ClusterRepository) whose identityDefaults.cluster is unset —
kind-neutral wording, since the rule is identical either way.
ForeignSnapshotsChoiceRequired
A ClusterRepository sets both identityDefaults.cluster and
catalog.fallbackNamespace but leaves catalog.foreignSnapshots
unset. Both being set at once is a strong signal the fallback
collector is actually relied upon, so adopting a cluster identity must
never silently switch it off by defaulting to Ignore — the choice is
forced explicit instead.
SeedRequiresMountableRepository
spec.seed on a repository whose own backend is a bare-path
filesystem (filesystem with no volume). Seeding runs in a mover Job;
a bare path is the one backend the CONTROLLER connects to in-process,
and the Job would have nothing mounted at it (issue #380).
SeedSourceRequiresMountableBackend
spec.seed.from.backend is itself a bare-path filesystem backend.
Same mover-topology problem as Self::SeedRequiresMountableRepository,
one field over: nothing would be mounted at the source path either.
SeedOnReadOnlyRepository
spec.seed on a mode: ReadOnly repository. Seeding is the largest
write a repository ever takes, so the two are contradictory.
SeedCreateOptionsInert
A blob-mode seed (seed.from.backend) alongside explicit
spec.create.{splitter,hash,encryption,ecc}. kopia repository sync-to
copies the mirror’s repository-format blob verbatim, so the declared
algorithms are never applied — kopiur does not accept inert fields.
Fields
SeedTuningNotApplicable
A mode-specific spec.seed tuning block paired with the other mode’s
source (seed.sync with from.repository, seed.migrate or
seed.credentialProjection.enabled with from.backend). Honoring it
silently would make it an inert field.
Fields
SeedSourceSameAsRepository
spec.seed.from.backend resolves to the same storage target as the
repository’s own spec.backend (same backend_target_key) — the seed
would read and write one location.
SeedMountPathCollision
The repository’s filesystem backend and its filesystem seed source share
one in-pod path, so the seeding mover Job would carry two volumeMounts
at a single mountPath — an invalid pod spec.
SeedSourceSelfReference
spec.seed.from.repository points at the repository being defined.
Fields
SeedSourceSecretNamespaceForbidden
A ClusterRepository’s spec.seed.from.backend credential Secret pins a
namespace. A cluster-scoped repository’s movers resolve their Secrets in
the namespace the bootstrap Job runs in — the operator’s own namespace
unless encryption.passwordSecretRef.namespace pins another — which the
spec cannot name here, so a pinned namespace is a dead reference.
Fields
SeedSourceSecretNamespaceMismatch
A namespaced Repository’s spec.seed.from.backend credential Secret is
pinned to some OTHER namespace. The seeding Job runs in the repository’s
namespace and loads the Secret via envFrom, which is namespace-local.
Trait Implementations§
Source§impl Clone for ValidationError
impl Clone for ValidationError
Source§fn clone(&self) -> ValidationError
fn clone(&self) -> ValidationError
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 ValidationError
impl Debug for ValidationError
Source§impl Display for ValidationError
impl Display for ValidationError
impl Eq for ValidationError
Source§impl Error for ValidationError
impl Error for ValidationError
1.30.0 · 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 PartialEq for ValidationError
impl PartialEq for ValidationError
Source§fn eq(&self, other: &ValidationError) -> bool
fn eq(&self, other: &ValidationError) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for ValidationError
Auto Trait Implementations§
impl Freeze for ValidationError
impl RefUnwindSafe for ValidationError
impl Send for ValidationError
impl Sync for ValidationError
impl Unpin for ValidationError
impl UnsafeUnpin for ValidationError
impl UnwindSafe for ValidationError
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more