Skip to main content

Progress

Enum Progress 

Source
#[non_exhaustive]
pub enum Progress { Planned { directories: usize, small_files: usize, small_bytes: u64, large_files: usize, large_bytes: u64, small_file_threshold: u64, }, Started { bytes_total: Option<u64>, entries_total: usize, }, EntryStarted { entry: Entry, }, EntryProgress { entry: Entry, bytes_copied: u64, }, EntryCompleted { entry: Entry, }, EntryFailed { entry: Entry, }, DirectoriesStarted { total: usize, }, DirectoryCompleted { path: PathBuf, }, DirectoryFailed { path: PathBuf, }, }
Expand description

Discrete per-entry events rather than a cumulative snapshot; EntryFailed carries only the Entry, not the ErrorError isn’t Clone (it wraps std::io::Error), and the failure detail is already available from the operation’s final OperationOutcome.failed once the handle resolves. #[non_exhaustive]: adding a variant here is otherwise a breaking change for any downstream exhaustive match, which is exactly what adding Planned was. Marked now so the next addition isn’t.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Planned

The shape of the work about to be performed, emitted once per phase before DirectoriesStarted and Started — i.e. before the directory pre-pass that Started doesn’t cover.

Exists for cost estimation (EtaEstimator): the small/large split is the difference between work whose cost is per-file (syscall-bound) and work whose cost is per-byte (bandwidth-bound), and Started’s single bytes_total can’t distinguish them. A consumer that only wants a progress bar can ignore this variant entirely.

Not emitted by the delete sweeps (sync’s orphan sweep, move_path’s source cleanup) — those are metadata-only phases with no byte-sized work to model, so they emit a bare Started.

Fields

§directories: usize

Directories needing an explicit create_dir_all — already filtered to those with no file beneath them (see pipeline.rs’s directories_covered_by_files), so this matches the DirectoriesStarted { total } that follows rather than the total directory count in the source tree.

§small_files: usize
§small_bytes: u64
§large_files: usize
§large_bytes: u64
§small_file_threshold: u64

The threshold that produced the split above. Carried so a consumer can classify each subsequent Entry the same way the planner did, without having to know what the builder was configured with.

§

Started

Emitted once per phase, before any entries in that phase start. bytes_total is None for phases with nothing byte-sized to report (the delete sweeps). Can be emitted more than once per operation — sync emits it once per phase (copy, then delete).

Fields

§bytes_total: Option<u64>
§entries_total: usize
§

EntryStarted

Fields

§entry: Entry
§

EntryProgress

Bytes written so far for an entry still in flight, sampled by watching the destination file grow. Emitted only for large (streamed) entries, and only while they take long enough to be sampled at all — a copy that the filesystem satisfies by copy-on-write finishes before the first sample and emits none.

bytes_copied is cumulative, not a delta, and is clamped to the entry’s size. It is monotonically non-decreasing per entry.

Exists because tokio::fs::copy is opaque while it runs: without this, a single large file emits EntryStarted and then nothing until it finishes, so its transfer rate is unmeasurable for exactly as long as it takes to copy.

Fields

§entry: Entry
§bytes_copied: u64
§

EntryCompleted

Fields

§entry: Entry
§

EntryFailed

Fields

§entry: Entry
§

DirectoriesStarted

The directory-creation pre-pass (operations/pipeline.rs’s ensure_directories_exist), separate from Started/Entry* since it operates on DirEntry, not Entry — carrying only the destination path (not the full DirEntry) is enough for a caller to show “N/M directories created” without extending every Entry-typed variant to also accept DirEntry. Added after a real run against a USB-connected exFAT drive spent about a minute silently creating ~7,700 directories one at a time before Started (for the file-copy phase) was ever emitted.

Fields

§total: usize
§

DirectoryCompleted

Fields

§path: PathBuf
§

DirectoryFailed

Fields

§path: PathBuf

Trait Implementations§

Source§

impl Clone for Progress

Source§

fn clone(&self) -> Progress

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Progress

Source§

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

Formats the value using the given formatter. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.