Functionally the same output as before, but much more elegant. Will need to figure out a solution for graph layout, as charming doesn't seem to provide a solution out of the box.
O7TNUABZ3VUPEYCLHORWVIVQCYC6SZRTD3XVLND54MI5L34IGSMAC .packages.iter().zip(0..self.packages.len()).map(|(pkg, coords)| charming::series::GraphNode {id: pkg.id.repr.clone(),name: self.data[&pkg.id].name.clone(),
.dependency_tree.node_weights().enumerate().map(|(coords, id)| charming::series::GraphNode {id: id.to_string(),name: self.data[*id].name.clone(),
.node_index.values().map(|node| {node.deps.iter().map(move |child| (node, child.pkg.repr.clone()))
.dependency_tree.edge_indices().map(|edge_idx| self.dependency_tree.edge_endpoints(edge_idx)).filter_map(|optional_endpoints| optional_endpoints).map(|(source_idx, target_idx)| {(&self.dependency_tree[source_idx],&self.dependency_tree[target_idx],)
.flatten().map(|(parent, child)| charming::series::GraphLink {source: parent.id.repr.clone(),target: child,
.map(|(source, target)| charming::series::GraphLink {source: source.repr.clone(),target: target.repr.clone(),