| 1 | use crate::graph::*; |
|---|---|
| 2 | use std::io::{self, Write}; |
| 3 | use serde::{Deserialize, Serialize}; |
| 4 | |
| 5 | /// A collection of graphs. |
| 6 | #[derive(Deserialize, Serialize)] |
| 7 | pub struct MultiGraph { |
| 8 | name: String, |
| 9 | graphs: Vec<Graph>, |
| 10 | } |
| 11 | |
| 12 | impl MultiGraph { |
| 13 | pub fn new(name: String, graphs: Vec<Graph>) -> MultiGraph { |
| 14 | MultiGraph { name, graphs } |
| 15 | } |
| 16 | |
| 17 | pub fn to_dot<W: Write>(&self, w: &mut W, settings: &GraphvizSettings) -> io::Result<()> { |
| 18 | let subgraphs: bool = self.graphs.len() > 1; |
| 19 | if subgraphs { |
| 20 | writeln!(w, "digraph{} {{ ", self.name)?; |
| 21 | } |
| 22 | |
| 23 | for graph: &Graph in &self.graphs { |
| 24 | graph.to_dot(w, settings, as_subgraph:subgraphs)?; |
| 25 | } |
| 26 | |
| 27 | if subgraphs { |
| 28 | writeln!(w, "}} ")?; |
| 29 | } |
| 30 | |
| 31 | Ok(()) |
| 32 | } |
| 33 | } |
| 34 |
