pray-core 1.9.0

Core library for Prayfile, the package manager for the language placed before inference
Documentation
use crate::resolve::ResolvedPackage;
use crate::{PrayError, PrayResult};
use std::collections::BTreeMap;

pub(crate) fn reject_dependency_cycles(packages: &[ResolvedPackage]) -> PrayResult<()> {
    let mut edges = BTreeMap::new();
    for package in packages {
        edges.insert(
            package.declaration.name.clone(),
            package
                .spec
                .dependencies
                .iter()
                .map(|dependency| dependency.name.clone())
                .collect(),
        );
    }
    if let Some(cycle) = crate::dependency_graph::find_dependency_cycle(&edges) {
        return Err(PrayError::Resolution(format!(
            "dependency cycle detected: {}",
            cycle.join(" -> ")
        )));
    }
    Ok(())
}