Skip to main content

DependencyGraph

Struct DependencyGraph 

Source
pub struct DependencyGraph {
    pub nodes: HashMap<String, DependencyNode>,
    pub edges: Vec<DependencyEdge>,
}
Expand description

Built dependency graph.

Fields§

§nodes: HashMap<String, DependencyNode>§edges: Vec<DependencyEdge>

Implementations§

Source§

impl DependencyGraph

Source

pub fn build(store: &CatalogStore) -> Self

Build the graph from a loaded CatalogStore.

Source

pub fn upstream(&self, asset_id: &str) -> Vec<&DependencyEdge>

All edges that originate from asset_id — i.e. what asset_id depends on.

Source

pub fn downstream(&self, asset_id: &str) -> Vec<&DependencyEdge>

All edges that point to asset_id — i.e. what depends on asset_id.

Source

pub fn upstream_ids(&self, asset_id: &str) -> Vec<String>

Convenience: sorted list of IDs that asset_id depends on (upstream nodes).

Source

pub fn downstream_ids(&self, asset_id: &str) -> Vec<String>

Convenience: sorted list of IDs that depend on asset_id (downstream nodes).

Source

pub fn blast_radius(&self, asset_id: &str) -> BlastRadius

Transitive blast-radius: which assets break if asset_id is removed?

Walks backwards through the graph (BFS over downstream edges) and returns every transitive dependent, sorted and deduplicated.

Source

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

Detect all cycles in the graph using iterative DFS.

Returns a list of cycles where each cycle is represented as an ordered list of node IDs forming the cycle path. The result is deterministically sorted so tests can make stable assertions.

Source

pub fn render_ascii_tree(&self, focus_id: &str, max_depth: usize) -> String

Render an ASCII dependency tree rooted at focus_id.

Each level is indented by 2 spaces per depth. Nodes already visited in the current path are marked [cycle] to avoid infinite output.

Source

pub fn to_adjacency_json(&self) -> Value

Export graph as a JSON adjacency list suitable for --report dependencies.

Shape:

{
  "nodes": [ { "id": "...", "asset_type": "..." }, ... ],
  "adjacency": {
    "<id>": [ { "to": "...", "edge_type": "depends-on" }, ... ],
    ...
  }
}

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