Skip to main content

TransferResult

Struct TransferResult 

Source
pub struct TransferResult {
    pub bytes_transferred: u64,
    pub duration_ms: u64,
    pub mtime_preserved: bool,
    pub durable: bool,
}
Expand description

Result of an SCP file transfer operation.

Fields§

§bytes_transferred: u64

Number of bytes transferred.

§duration_ms: u64

Total duration in milliseconds.

§mtime_preserved: bool

Whether the remote modification time was applied to the local file.

G-SCP-R01: the product documented mtime preservation as a guarantee while the implementation discarded the failure at two nesting levels. Destination filesystems that cannot represent the operation — FAT32, exFAT, some bind mounts, WSL interop paths — silently produced a file with the wrong timestamp, and a build pipeline deciding whether to recompile by mtime comparison took the wrong branch with the symptom appearing far from the cause. Reporting the outcome resolves the contradiction without failing transfers that are otherwise complete and correct.

Always true for uploads and whenever the remote sent no timestamps: there was nothing to preserve, so nothing was lost.

§durable: bool

Whether the parent directory was successfully fsynced after the atomic rename.

G-SCP-R02: the rename is atomic, but until the directory entry is flushed a crash can leave the file missing even though the CLI already reported exit 0. The fsync was best-effort by design and invisible by accident; an agent had no way to know whether the success it received was durable.

Trait Implementations§

Source§

impl Clone for TransferResult

Source§

fn clone(&self) -> TransferResult

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 TransferResult

Source§

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

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

impl Default for TransferResult

Source§

fn default() -> Self

Defaults describe “nothing was attempted, so nothing failed”.

The booleans default to true because every non-SCP-download path either has no local file to stamp or no rename to flush. Defaulting them to false would have reported spurious durability loss on uploads.

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more