diff --git a/radicle-dag/src/lib.rs b/radicle-dag/src/lib.rs index 7cbdc627..cf749cb5 100644 --- a/radicle-dag/src/lib.rs +++ b/radicle-dag/src/lib.rs @@ -5,6 +5,7 @@ use std::{ cmp::Ordering, collections::{BTreeMap, BTreeSet, VecDeque}, fmt, + fmt::Write, ops::{ControlFlow, Deref, Index}, }; @@ -313,6 +314,23 @@ impl Dag { } } +impl Dag { + /// Return the graph in "dot" format. + pub fn to_dot(&self) -> String { + let mut output = String::new(); + + writeln!(output, "digraph G {{").ok(); + for (k, v) in self.graph.iter() { + for d in &v.dependencies { + writeln!(output, "\t\"{k}\" -> \"{d}\";").ok(); + } + } + writeln!(output, "}}").ok(); + + output + } +} + impl Index<&K> for Dag { type Output = Node;