Skip to main content

OperationOutcome

Struct OperationOutcome 

Source
#[non_exhaustive]
pub struct OperationOutcome { pub succeeded: Vec<Entry>, pub failed: Vec<(Entry, Error)>, pub cleanup_failed: Vec<(Entry, Error)>, pub stopped_early: Option<StopReason>, pub directories_failed: Vec<(PathBuf, Error)>, pub duration: Duration, }
Expand description

Aggregate result of running an ExecutionPlan. Replaces a bare Result<(), Error> because ErrorStrategy::ContinueAndCollect can finish with a mix of successes and failures that a single Result can’t represent. #[non_exhaustive]: an output type, built by this crate and read by the caller, so blocking downstream construction costs nothing — Default and ..-destructuring both still work. Adding duration was a breaking change for exhaustive struct literals; marked now so the next field isn’t, same reasoning as Progress.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§succeeded: Vec<Entry>§failed: Vec<(Entry, Error)>§cleanup_failed: Vec<(Entry, Error)>

Populated only by move’s deferred deletion sweep: entries that copied successfully but whose original source could not be removed afterward (data duplicated, not lost). Copy never populates this field.

§stopped_early: Option<StopReason>§directories_failed: Vec<(PathBuf, Error)>

Populated only by the directory-permissions pass (.preserve_permissions()), which always runs to completion regardless of individual failures and never affects stopped_early — a directory chmod failure is a best-effort finishing touch, not an interruption of the actual data transfer. Unconditional (not #[cfg(unix)]-gated), same reasoning as Entry.mode: avoids a platform-conditional shape for a type with many existing construction sites. Always empty on non-Unix or when permission preservation wasn’t requested.

§duration: Duration

Wall time the operation took, stamped where the outcome is produced for the caller. The counterpart to Handle::elapsed() for after the handle has been consumed by .await.

SyncOutcome’s two outcomes are timed per phase, so they don’t sum to the whole run — the diff that precedes them belongs to neither. Handle::elapsed() remains the figure for the run as a whole.

Duration::ZERO on a phase that never ran (sync’s delete sweep when the copy phase stopped early) and on outcomes built by hand in tests, which take the Default.

Trait Implementations§

Source§

impl Debug for OperationOutcome

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for OperationOutcome

Source§

fn default() -> OperationOutcome

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.