#[non_exhaustive]pub struct StreamCandidate<S> {
pub source: S,
pub ctx: Arc<Mutex<PoolContext>>,
pub ledger: Arc<PoolLedger>,
pub coverage: Option<Coverage>,
/* private fields */
}Expand description
One provider’s paid lane: the paid source plus the (ctx, ledger) that
pays it. A [SourceProvider] builds one per holder, and both faces fetch
across them.
A lane that faults mid-fetch cools and returns; its remainder continues
from another lane meanwhile, resuming from the store’s verified frontier so
no delivered byte is re-pulled or re-paid. Every lane names a distinct
on-chain provider (one voucher stream per (signer, provider) lane).
Build one with Self::new, and set Self::coverage for a partial
holder.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.source: SThe paid source — one provider’s cdn/client/v1 requester.
ctx: Arc<Mutex<PoolContext>>The buyer context paying this candidate’s provider (shared behind interior mutability so a funding recovery step’s deposit is visible to its next open).
ledger: Arc<PoolLedger>This candidate’s per-(signer, provider) voucher ledger.
coverage: Option<Coverage>This candidate’s measured block coverage for the blob being fetched
(#1506), or None to treat it as a full holder. A partial holder MUST
set this so the scheduler never assigns it — and it never steals — a
range it does not hold; None maps to Coverage::full sized to the
blob, the right default for the common case that discovery yields whole-
blob holders. The bitmap is sized to ONE blob, so a crate::Downloader
given several targets applies it to each of them: set it only on a
single-target fetch.
Implementations§
Source§impl<S> StreamCandidate<S>
impl<S> StreamCandidate<S>
Sourcepub fn new(
source: S,
ctx: Arc<Mutex<PoolContext>>,
ledger: Arc<PoolLedger>,
) -> Self
pub fn new( source: S, ctx: Arc<Mutex<PoolContext>>, ledger: Arc<PoolLedger>, ) -> Self
A whole-blob holder’s lane: source paid from ctx through ledger,
holding no lease and staying at one stream.
Trait Implementations§
Auto Trait Implementations§
impl<S> !Freeze for StreamCandidate<S>
impl<S> !RefUnwindSafe for StreamCandidate<S>
impl<S> !UnwindSafe for StreamCandidate<S>
impl<S> Send for StreamCandidate<S>where
S: Send,
impl<S> Sync for StreamCandidate<S>where
S: Sync,
impl<S> Unpin for StreamCandidate<S>where
S: Unpin,
impl<S> UnsafeUnpin for StreamCandidate<S>where
S: UnsafeUnpin,
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> 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 more