pub struct DependencyGraph {
pub nodes: HashMap<String, InstallNode>,
pub adj: HashMap<String, HashSet<String>>,
}Expand description
A Directed Acyclic Graph (DAG) representing the installation plan.
The graph ensures that dependencies are installed before the packages
that require them. The $root node acts as the entry point linking
all direct user requests.
Fields§
§nodes: HashMap<String, InstallNode>A map of package IDs to their complete installation data.
adj: HashMap<String, HashSet<String>>The adjacency list representing the directed edges (dependencies) between packages.
Implementations§
Source§impl DependencyGraph
impl DependencyGraph
Sourcepub fn new() -> DependencyGraph
pub fn new() -> DependencyGraph
Creates a new, empty DependencyGraph.
Sourcepub fn toposort(&self) -> Result<Vec<Vec<String>>, Error>
pub fn toposort(&self) -> Result<Vec<Vec<String>>, Error>
Performs a topological sort of the graph, returning packages grouped into installation stages.
Packages with no dependencies (leaf nodes) appear in the first stage, followed by packages that only depend on those in the first stage, and so on. This ensures that dependencies are always installed before their dependents.
§Errors
Returns an error if a cycle is detected in the dependency graph or if there’s an internal inconsistency in the graph structure.
Trait Implementations§
Source§impl Debug for DependencyGraph
impl Debug for DependencyGraph
Source§impl Default for DependencyGraph
impl Default for DependencyGraph
Source§fn default() -> DependencyGraph
fn default() -> DependencyGraph
Auto Trait Implementations§
impl Freeze for DependencyGraph
impl RefUnwindSafe for DependencyGraph
impl Send for DependencyGraph
impl Sync for DependencyGraph
impl Unpin for DependencyGraph
impl UnsafeUnpin for DependencyGraph
impl UnwindSafe for DependencyGraph
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