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 }