pub struct FileTransferManager { /* private fields */ }Expand description
File transfer manager for chunking and reassembly.
Implementations§
Source§impl FileTransferManager
impl FileTransferManager
Sourcepub const MANUAL_SENDER: &'static str = "manual:ffi"
pub const MANUAL_SENDER: &'static str = "manual:ffi"
Pseudo-sender bound to assemblies fed through the manual
process_file_chunk FFI path, which carries no wire sender. All
manual chunks share this identity for sender binding and quota. The
: is rejected by wire UserId validation, so no remote peer can
ever claim this identity.
Sourcepub fn with_config(config: FileTransferConfig) -> Self
pub fn with_config(config: FileTransferConfig) -> Self
Creates a new file transfer manager with custom configuration.
max_total_buffered_bytes is clamped up to what a single
max_file_size transfer charges (payload plus per-chunk overhead) —
any lower value would make max_file_size unachievable.
Sourcepub fn chunk_file(
&self,
file_id: String,
file_name: String,
file_data: Vec<u8>,
chunk_size_override: Option<usize>,
) -> Result<Vec<FileChunk>>
pub fn chunk_file( &self, file_id: String, file_name: String, file_data: Vec<u8>, chunk_size_override: Option<usize>, ) -> Result<Vec<FileChunk>>
Chunks a file for sending.
§Arguments
file_id- Unique identifier for this file transferfile_name- Name of the filefile_data- Complete file datachunk_size_override- IfSome, uses this chunk size instead of the configured default. Allows callers to select a transport-appropriate chunk size.
§Returns
Returns a vector of FileChunk ready to send. Fails if the file is
empty or exceeds max_file_size, if the chunk size is zero, or if
the chunking is so fine that the chunk count would exceed the
receive-side total_chunks cap — Self::process_chunk on a
receiver with the same max_file_size would silently drop every
chunk of such a transfer.
Sourcepub fn process_chunk(
&mut self,
sender: &str,
chunk: FileChunk,
) -> Result<FileProgress, ChunkRejection>
pub fn process_chunk( &mut self, sender: &str, chunk: FileChunk, ) -> Result<FileProgress, ChunkRejection>
Processes a received file chunk from sender.
All wire-supplied fields (file_size, total_chunks, chunk_data,
file_id) are bounded here before any assembly state is created, so
a remote peer cannot force oversized allocations or unbounded
bookkeeping. Assemblies are bound to the sender that started them,
counted against global and per-sender caps, and the bytes buffered
across all assemblies never exceed max_total_buffered_bytes.
§Arguments
sender- The authenticated (or wire-claimed) sender of the chunkchunk- The received file chunk
§Returns
Returns Ok(FileProgress) with current progress, or the
ChunkRejection explaining why the chunk was dropped.
Sourcepub fn is_complete(&self, file_id: &str) -> bool
pub fn is_complete(&self, file_id: &str) -> bool
Checks if a file transfer is complete.
Sourcepub fn finalize_file(&mut self, file_id: &str) -> Option<Vec<u8>>
pub fn finalize_file(&mut self, file_id: &str) -> Option<Vec<u8>>
Finalizes a file transfer and returns the complete file data.
Verifies the SHA256 checksum of the reassembled file before returning.
§Arguments
file_id- File identifier
§Returns
Returns Some(Vec<u8>) if file is complete, its size matches the
claimed file_size, and the checksum matches, None otherwise.
Sourcepub fn cleanup_stale_transfers(
&mut self,
max_age: Duration,
) -> Vec<StaleTransfer>
pub fn cleanup_stale_transfers( &mut self, max_age: Duration, ) -> Vec<StaleTransfer>
Removes stale/incomplete transfers that have not received any chunk
updates within max_age, returning what was dropped so callers can
surface the loss. Swept ids are tombstoned so straggler chunks
cannot resurrect them; tombstones themselves expire by the same
rule — no chunks for max_age — freeing the id for reuse.
Sourcepub fn get_progress(&self, file_id: &str) -> Option<FileProgress>
pub fn get_progress(&self, file_id: &str) -> Option<FileProgress>
Gets the progress of an active file transfer.
Sourcepub fn cancel_transfer(&mut self, file_id: &str) -> bool
pub fn cancel_transfer(&mut self, file_id: &str) -> bool
Cancels an active file transfer.
Sourcepub fn active_transfer_count(&self) -> usize
pub fn active_transfer_count(&self) -> usize
Gets the number of active file transfers.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for FileTransferManager
impl RefUnwindSafe for FileTransferManager
impl Send for FileTransferManager
impl Sync for FileTransferManager
impl Unpin for FileTransferManager
impl UnsafeUnpin for FileTransferManager
impl UnwindSafe for FileTransferManager
Blanket Implementations§
Source§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
Source§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);