pub trait DependencyResolver {
// Required methods
fn resolve_dependencies(
&self,
workspace: &Workspace,
lockfile: &[LockfileEntry],
) -> Result<DependencyGraph>;
fn resolve_workspace_deps(
&self,
workspace: &Workspace,
) -> Result<Vec<DependencyRef>>;
fn resolve_external_deps(
&self,
lockfile: &[LockfileEntry],
) -> Result<Vec<DependencyRef>>;
fn detect_workspace_protocol(&self, spec: &str) -> bool;
}Expand description
Builds dependency graphs from workspace and lockfile data.
This trait combines workspace-internal dependencies (workspace protocol references) with external dependencies from lockfiles to build a complete dependency graph.
§Example
use cuenv_workspaces::{DependencyResolver, Workspace, LockfileEntry};
struct NpmDependencyResolver;
impl DependencyResolver for NpmDependencyResolver {
fn resolve_dependencies(
&self,
workspace: &Workspace,
lockfile: &[LockfileEntry],
) -> Result<DependencyGraph> {
// Build graph with both workspace and external dependencies
todo!()
}
fn resolve_workspace_deps(&self, workspace: &Workspace) -> Result<Vec<DependencyRef>> {
// Find dependencies using "workspace:*" protocol
todo!()
}
fn resolve_external_deps(&self, lockfile: &[LockfileEntry]) -> Result<Vec<DependencyRef>> {
// Extract all external dependencies from lockfile
todo!()
}
fn detect_workspace_protocol(&self, spec: &str) -> bool {
spec.starts_with("workspace:")
}
}Required Methods§
Sourcefn resolve_dependencies(
&self,
workspace: &Workspace,
lockfile: &[LockfileEntry],
) -> Result<DependencyGraph>
fn resolve_dependencies( &self, workspace: &Workspace, lockfile: &[LockfileEntry], ) -> Result<DependencyGraph>
Builds a complete dependency graph from workspace and lockfile data.
The graph should include:
- Workspace members as nodes
- Workspace-internal dependencies (workspace protocol)
- External dependencies from the lockfile
- Edges representing dependency relationships
§Errors
Returns an error if:
- Dependencies cannot be resolved
- Circular dependencies are detected (if validation is enabled)
- Required dependencies are missing from the lockfile
Sourcefn resolve_workspace_deps(
&self,
workspace: &Workspace,
) -> Result<Vec<DependencyRef>>
fn resolve_workspace_deps( &self, workspace: &Workspace, ) -> Result<Vec<DependencyRef>>
Resolves workspace-internal dependencies.
These are dependencies that reference other workspace members using package manager-specific protocols:
- npm/pnpm/Yarn:
"workspace:*","workspace:^", etc. - Cargo:
{ workspace = true }
§Errors
Returns an error if workspace dependencies cannot be resolved.
Sourcefn resolve_external_deps(
&self,
lockfile: &[LockfileEntry],
) -> Result<Vec<DependencyRef>>
fn resolve_external_deps( &self, lockfile: &[LockfileEntry], ) -> Result<Vec<DependencyRef>>
Resolves external dependencies from lockfile entries.
Extracts all non-workspace dependencies from the lockfile.
§Errors
Returns an error if dependencies cannot be extracted or validated.
Sourcefn detect_workspace_protocol(&self, spec: &str) -> bool
fn detect_workspace_protocol(&self, spec: &str) -> bool
Detects if a dependency specification uses the workspace protocol.
§Examples
- npm/pnpm/Yarn:
"workspace:*"→true - Cargo: Requires parsing TOML to check
workspace = true - Regular semver:
"^1.0.0"→false