use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use crate::{DepEdge, Ecosystem, Package, PackageId};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ProjectRoot {
pub id: PackageId,
pub path: PathBuf,
pub ecosystem: Ecosystem,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct DeclaredEdge {
pub from: PackageId,
pub to: PackageId,
pub kind: DeclaredEdgeKind,
pub via: Option<String>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum DeclaredEdgeKind {
Build,
Development,
Peer,
Production,
Root,
}
pub trait DependencyResolver: Send + Sync {
fn packages(&self) -> impl Iterator<Item = &Package>;
fn dependencies_of(&self, id: &PackageId) -> impl Iterator<Item = &DepEdge>;
fn dependents_of(&self, id: &PackageId) -> impl Iterator<Item = &DepEdge>;
fn diagnostics(&self) -> &[crate::Diagnostic] {
&[]
}
}