DependencyGraph

Struct DependencyGraph 

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

Dependency graph for node relationships

Maintains a directed graph of node dependencies where an edge from A to B means “A depends on B” (B must start before A).

Implementations§

Source§

impl DependencyGraph

Source

pub fn new() -> Self

Create a new empty dependency graph

Source

pub fn from_configs(configs: &[NodeConfig]) -> Result<Self>

Build dependency graph from node configurations

§Arguments
  • configs - Slice of node configurations
§Returns

Dependency graph or error if dependencies are invalid

§Errors
  • Circular dependencies detected
  • Undefined dependency references
Source

pub fn add_node(&mut self, node_id: &str)

Add a node to the graph

Source

pub fn add_dependency(&mut self, node_id: &str, dependency: &str) -> Result<()>

Add a dependency relationship

§Arguments
  • node_id - The dependent node
  • dependency - The node that node_id depends on
§Errors

Returns error if dependency node doesn’t exist

Source

pub fn validate(&self) -> Result<()>

Validate the dependency graph

Checks for:

  • Circular dependencies
  • Undefined dependency references
Source

pub fn topological_sort(&self) -> Result<Vec<String>>

Perform topological sort using Kahn’s algorithm

Returns nodes in dependency order (dependencies before dependents). This is the order for starting nodes.

§Returns

Vector of node IDs in topological order

§Errors

Returns error if graph has cycles

Source

pub fn reverse_topological_sort(&self) -> Result<Vec<String>>

Get reverse topological sort (for shutdown order)

Returns nodes in reverse dependency order (dependents before dependencies). This is the order for stopping nodes.

Source

pub fn startup_plan(&self) -> Result<StartupPlan>

Get startup plan with nodes grouped by dependency level

Nodes at the same level have no dependencies on each other and can be started in parallel.

§Returns

StartupPlan with nodes grouped by level

Source

pub fn shutdown_plan(&self) -> Result<ShutdownPlan>

Get shutdown plan (reverse of startup plan)

Source

pub fn get_all_dependencies(&self, node_id: &str) -> HashSet<String>

Get all dependencies of a node (transitive closure)

Returns all nodes that must be started before this node.

Source

pub fn get_all_dependents(&self, node_id: &str) -> HashSet<String>

Get all dependents of a node (transitive closure)

Returns all nodes that must be stopped before this node can be stopped.

Source

pub fn can_start(&self, node_id: &str, running: &HashSet<String>) -> bool

Check if a node can be started

Returns true if all dependencies are in the provided running set.

Source

pub fn can_stop(&self, node_id: &str, running: &HashSet<String>) -> bool

Check if a node can be stopped

Returns true if no dependents are in the provided running set.

Source

pub fn get_direct_dependents(&self, node_id: &str) -> Vec<String>

Get nodes that depend on this node

Source

pub fn get_direct_dependencies(&self, node_id: &str) -> Vec<String>

Get nodes this node depends on

Source

pub fn node_count(&self) -> usize

Get the number of nodes in the graph

Source

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

Get all node IDs

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
Source§

impl Default for DependencyGraph

Source§

fn default() -> Self

Returns the “default value” for a 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> 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> 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> 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