github.com/charypar/monobuild@v0.0.0-20211122220434-fd884ed50212/rs/src/graph/debug.rs (about)

     1  use std::fmt::Debug;
     2  
     3  use super::{Edge, Graph, Subgraph, Vertex};
     4  
     5  impl<V, E> Debug for Graph<V, E>
     6  where
     7      V: Vertex + Debug,
     8      E: Edge + Debug,
     9  {
    10      fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    11          let edges: Vec<_> = self
    12              .edges
    13              .iter()
    14              .enumerate()
    15              .flat_map(|(fi, es)| {
    16                  es.iter()
    17                      .map(move |(ti, l)| (self.vertices[fi].clone(), self.vertices[*ti].clone(), l))
    18              })
    19              .collect();
    20  
    21          f.debug_struct("Graph")
    22              .field("vertices", &self.vertices)
    23              .field("edges", &edges)
    24              .finish()
    25      }
    26  }
    27  
    28  impl<V, E> Debug for Subgraph<'_, V, E>
    29  where
    30      V: Vertex + Debug,
    31      E: Edge + Debug,
    32  {
    33      fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    34          let vertices: Vec<_> = self
    35              .graph
    36              .vertices
    37              .iter()
    38              .enumerate()
    39              .filter_map(|(i, v)| if self.vertex_mask[i] { Some(v) } else { None })
    40              .collect();
    41  
    42          let edges: Vec<_> = self
    43              .graph
    44              .edges
    45              .iter()
    46              .enumerate()
    47              .flat_map(|(fi, es)| {
    48                  es.iter().filter_map(move |(ti, l)| {
    49                      if self.edge_mask.contains(&(fi, *ti)) {
    50                          Some((
    51                              self.graph.vertices[fi].clone(),
    52                              self.graph.vertices[*ti].clone(),
    53                              l,
    54                          ))
    55                      } else {
    56                          None
    57                      }
    58                  })
    59              })
    60              .collect();
    61  
    62          f.debug_struct("Subgraph")
    63              .field("vertices", &vertices)
    64              .field("edges", &edges)
    65              .finish()
    66      }
    67  }