Skip to main content

UnorderedDownloadStream

Struct UnorderedDownloadStream 

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

A streaming download handle that yields data chunks in completion order, each tagged with its byte offset in the output file.

Created by FileReconstructor::reconstruct_to_unordered_stream. The reconstruction task is spawned immediately but pauses until start is called (or the first next / blocking_next). Because the tokio::spawn happens at construction time, subsequent calls to start(), next(), and blocking_next() do not require a tokio runtime context.

Unlike DownloadStream, data chunks may arrive out of order. Each chunk is returned as (offset, Bytes) so the consumer knows where it belongs. Progress can be monitored via the tracking methods which read shared atomic counters.

Holds only Arc<WriterProgress>, not the writer itself, so the channel sender is dropped naturally when the reconstruction task finishes.

Implementations§

Source§

impl UnorderedDownloadStream

Source

pub fn start(&mut self)

Unblocks the reconstruction task so it begins producing data.

If already started, this is a no-op. Called automatically on the first next / blocking_next.

This method is non-async and does not require a tokio runtime context.

Source

pub fn blocking_next(&mut self) -> Result<Option<(u64, Bytes)>>

Returns the next chunk of downloaded data with its byte offset, blocking the current thread until data is available.

Returns Ok(None) when the download is complete.

§Panics

Panics if called from within an async runtime context. Use from a regular thread or from tokio::task::spawn_blocking instead. For the async-safe variant, use next.

Source

pub async fn next(&mut self) -> Result<Option<(u64, Bytes)>>

Returns the next chunk of downloaded data with its byte offset asynchronously.

Returns Ok(None) when the download is complete.

Source

pub fn cancel(&mut self)

Cancels the in-progress (or not-yet-started) download.

Signals the shared run state so the reconstruction loop aborts at its next check point. After calling this, subsequent calls to blocking_next / next will return Ok(None).

Source

pub fn total_bytes_expected(&self) -> u64

Total bytes expected for the reconstruction, read from the progress updater. Returns 0 if not yet known or no progress updater is set.

Source

pub fn bytes_in_progress(&self) -> u64

Bytes currently being fetched by in-progress tasks.

Source

pub fn bytes_completed(&self) -> u64

Bytes that have been delivered through the progress updater. Returns 0 if no progress updater is set.

Source

pub fn terms_in_progress(&self) -> u64

Number of tasks currently resolving data futures.

Source

pub fn is_complete(&self) -> bool

Returns true once the stream has reached terminal state.

This flips to true after next / blocking_next has observed the end-of-stream (None), or after cancel. Buffered but unconsumed channel items do not count as complete.

Trait Implementations§

Source§

impl Drop for UnorderedDownloadStream

Source§

fn drop(&mut self)

Executes the destructor for this 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> 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