Skip to main content

FileReconstructor

Struct FileReconstructor 

Source
pub struct FileReconstructor { /* private fields */ }
Expand description

Reconstructs a file from its content-addressed chunks by downloading xorb blocks and writing the reassembled data to an output. Supports byte range requests and uses memory-limited buffering with adaptive prefetching.

Implementations§

Source§

impl FileReconstructor

Source

pub fn new(client: &Arc<dyn Client>, file_hash: MerkleHash) -> Self

Source

pub fn with_byte_range(self, byte_range: FileRange) -> Self

Source

pub fn with_progress_updater( self, progress_updater: Arc<ItemProgressUpdater>, ) -> Self

Source

pub fn with_chunk_cache(self, cache: Arc<dyn ChunkCache>) -> Self

Source

pub fn with_config(self, config: impl AsRef<ReconstructionConfig>) -> Self

Source

pub fn with_buffer_semaphore(self, semaphore: Arc<AdjustableSemaphore>) -> Self

Sets a custom buffer semaphore for controlling download buffer memory usage. This is primarily useful for testing scenarios where you want to control the timing of term fetches by limiting buffer capacity.

Source

pub fn with_cancellation_token(self, token: CancellationToken) -> Self

Replaces the default cancellation token with the given one. This is used when external code needs to share the same token for coordinated cancellation.

Source

pub async fn reconstruct_to_file( self, path: &Path, write_offset: Option<u64>, truncate_file: bool, ) -> Result<u64>

Reconstructs the file and writes it to the given path.

The file is opened with read/write access. When truncate_file is true the file is truncated to the reconstructed length; when false the file is left at its existing size, allowing multiple concurrent reconstructions to write to different regions of the same file.

When write_offset is Some(offset), writing begins at that byte position regardless of the byte range. When None, writing begins at the byte range start (or 0 for a full-file reconstruction).

Source

pub async fn reconstruct_to_writer<W: Write + Send + 'static>( self, writer: W, ) -> Result<u64>

Reconstructs the file and writes it to the given writer.

The writer receives data starting from its current position (position 0 for a fresh writer), regardless of the byte range being reconstructed.

Source

pub fn reconstruct_to_stream(self) -> DownloadStream

Reconstructs the file as a stream, returning a DownloadStream that yields data chunks as they become available.

The reconstruction task is spawned immediately but pauses on an internal tokio::sync::Notify until DownloadStream::start is called (or the first DownloadStream::next / DownloadStream::blocking_next).

§Panics

Panics if called outside a tokio runtime context (the constructor uses tokio::spawn).

Source

pub fn reconstruct_to_unordered_stream(self) -> UnorderedDownloadStream

Reconstructs the file as an unordered stream, returning an UnorderedDownloadStream that yields (offset, Bytes) chunks in whatever order they complete.

The reconstruction task is spawned immediately but pauses on an internal tokio::sync::Notify until UnorderedDownloadStream::start is called (or the first UnorderedDownloadStream::next / UnorderedDownloadStream::blocking_next).

§Panics

Panics if called outside a tokio runtime context (the constructor uses tokio::spawn).

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

Source§

type Flavor = MayDrop

The DropFlavor that wraps T into Self
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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