Skip to main content

Resolver

Struct Resolver 

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

Iterative dependency resolver that works in levels.

Instead of using a callback for index lookups (which would require blocking HTTP inside an async runtime), this resolver works in a pull-based way:

  1. Call seed() with your direct dependencies
  2. Call pending_crates() to get crate names that need index data
  3. Fetch those indexes (async, in the caller)
  4. Call provide_index() for each fetched index
  5. Call advance() to process one level of the graph
  6. Repeat 2-5 until pending_crates() returns empty
  7. Call finish() to get the resolved graph

Implementations§

Source§

impl Resolver

Source

pub fn new() -> Self

Source

pub fn seed(&mut self, deps: &BTreeMap<String, String>)

Seed the resolver with direct dependencies from depends.toml.

Source

pub fn provide_index(&mut self, name: &str, entries: Vec<IndexEntry>)

Provide index entries for a crate (fetched by the caller).

Source

pub fn pending_crates(&self) -> Vec<String>

Return the names of crates that are queued but whose index data is not yet in the cache. The caller should fetch these and call provide_index before calling advance.

Source

pub fn has_work(&self) -> bool

Returns true if there are still crates to resolve.

Source

pub fn advance(&mut self) -> Result<()>

Process all currently queued crates. This resolves their versions, computes enabled features, and enqueues their transitive deps. After this call, pending_crates() may return new names to fetch.

Source

pub fn finish(self, direct_deps: &BTreeMap<String, String>) -> ResolvedGraph

Consume the resolver and return the final resolved graph.

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> 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, 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