DependencyGraph

Struct DependencyGraph 

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

Directed acyclic graph of package dependencies.

Uses compact u32 indices internally for better memory efficiency and cache performance. Public API maintains String-based interface for compatibility.

Implementations§

Source§

impl DependencyGraph

Source

pub fn new(packages: Vec<Package>) -> Result<Self>

Creates a new dependency graph from a list of packages.

§Errors

Returns an error if circular dependencies are detected.

Source

pub fn get_package(&self, name: &str) -> Option<&Package>

Retrieves a package by name.

Source

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

Returns packages in topological order (dependencies before dependents).

This is cached during graph construction for fast access.

Source

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

Returns dependency levels for parallel execution.

Each level contains packages that can be executed in parallel.

Source

pub fn dependencies(&self, package_name: &str) -> Result<Vec<String>>

Returns direct dependencies of a package.

§Errors

Returns an error if the package is not found in the graph.

Source

pub fn dependents(&self, package_name: &str) -> Result<Vec<String>>

Returns direct dependents of a package (packages that depend on it).

§Errors

Returns an error if the package is not found in the graph.

Source

pub fn all_dependents(&self, package_name: &str) -> Result<HashSet<String>>

Returns all transitive dependents of a package.

This includes both direct and indirect dependents (packages that depend on packages that depend on this package, etc.).

Results are cached for performance.

§Errors

Returns an error if the package is not found in the graph.

Source

pub fn affected_packages( &self, changed_packages: &[String], ) -> Result<HashSet<String>>

Returns all packages affected by changes to the given packages.

This includes the changed packages themselves and all their transitive dependents.

Uses parallel BFS for better performance on large graphs.

§Errors

Returns an error if any of the changed packages are not found in the graph.

Source

pub fn all_packages(&self) -> Vec<&Package>

Returns all packages in the graph.

Source

pub fn save_to_file(&self, path: impl AsRef<Path>) -> Result<()>

Serializes the graph to a file for fast loading.

Source

pub fn load_from_file(path: impl AsRef<Path>) -> Result<Self>

Loads a graph from a previously saved file.

Source

pub fn update_incremental(&mut self, changes: GraphChange) -> Result<()>

Updates the graph incrementally based on detected changes.

This is much faster than rebuilding the entire graph when only a few packages have changed.

§Errors

Returns an error if any package operations fail or circular dependencies are detected.

Trait Implementations§

Source§

impl Clone for DependencyGraph

Source§

fn clone(&self) -> DependencyGraph

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DependencyGraph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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