dagre_rust 0.0.5

Dagre implementation in Rust
Documentation
use graphlib_rust::Graph;
use ordered_hashmap::OrderedHashMap;
use crate::{GraphConfig, GraphEdge, GraphNode};

pub fn add_subgraph_constraints(
  g: &Graph<GraphConfig, GraphNode, GraphEdge>,
  cg: &mut Graph<GraphConfig, GraphNode, GraphEdge>,
  vs: &Vec<String>
) {
  let mut prev: OrderedHashMap<String, String> = OrderedHashMap::new();
  let mut _root_prev: Option<String> = None;

  vs.iter().for_each(|v| {
    let mut child = g.parent(v).cloned();
    let mut _parent: Option<String> = None;
    let mut _prev_child: Option<String> = None;
    while child.is_some() {
      _parent = g.parent(&child.clone().unwrap()).cloned();
      if _parent.is_some() {
        _prev_child = prev.get(&_parent.clone().unwrap_or("".to_string())).cloned();
        prev.insert(_parent.clone().unwrap(), child.clone().unwrap());
      } else {
        _prev_child = _root_prev.clone();
        _root_prev = child.clone();
      }

      let prev_child = _prev_child.clone().unwrap_or("".to_string());
      let child_ = child.clone().unwrap_or("".to_string());
      if _prev_child.is_some() && prev_child != child_ {
        let _ = cg.set_edge(&prev_child, &child_, None, None);
        return ();
      }
      child = _parent.clone();
    }
  });
}