Skip to main content

callisto_model/
discovery.rs

1use std::path::PathBuf;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{DepEdge, Ecosystem, Package, PackageId};
6
7/// A located project root in the workspace.
8#[derive(Clone, Debug, PartialEq, Eq)]
9pub struct ProjectRoot {
10    pub id: PackageId,
11    pub path: PathBuf,
12    pub ecosystem: Ecosystem,
13}
14
15/// A declared dependency edge (e.g. from moon project locator).
16#[derive(Clone, Debug, PartialEq, Eq)]
17pub struct DeclaredEdge {
18    pub from: PackageId,
19    pub to: PackageId,
20    pub kind: DeclaredEdgeKind,
21    pub via: Option<String>,
22}
23
24/// Kind of declared dependency edge from external tool discovery.
25#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub enum DeclaredEdgeKind {
28    Build,
29    Development,
30    Peer,
31    Production,
32    Root,
33}
34
35/// Core dependency graph resolver trait seam.
36pub trait DependencyResolver: Send + Sync {
37    fn packages(&self) -> impl Iterator<Item = &Package>;
38    fn dependencies_of(&self, id: &PackageId) -> impl Iterator<Item = &DepEdge>;
39    fn dependents_of(&self, id: &PackageId) -> impl Iterator<Item = &DepEdge>;
40    fn diagnostics(&self) -> &[crate::Diagnostic] {
41        &[]
42    }
43}