depclean 0.1.2

A tool to analyze and optimize project dependencies
Documentation
use crate::parser::Package;
use petgraph::graph::{Graph, NodeIndex};
use std::collections::HashMap;

pub struct DependencyGraph {
    pub graph: Graph<Package, ()>,
    pub index_map: HashMap<String, NodeIndex>,
}

impl DependencyGraph{
    pub fn from_lockfile(packages: Vec<Package>) -> Self{
        let mut graph = Graph::new();
        let mut index_map = HashMap::new();
        for pkg in packages{
            let key = format!("{} {}", pkg.name, pkg.version);
            let idx = graph.add_node(pkg);
            index_map.insert(key, idx);
        }
        for (_key, &idx) in &index_map{
            let dependencies = graph[idx].dependencies.clone();
            if let Some(dependencies) = dependencies{
                for dep in dependencies{
                    if let Some(&dep_idx) = index_map.get(&dep){
                        graph.add_edge(idx, dep_idx, ());
                    }
                }
            }
        }
        Self{graph, index_map}
    }
}