pub mod dependency;
pub mod graph;
pub mod resolver;
pub mod types;
pub mod version;
pub use graph::{
DependencyGraph, DependencyNode, GraphStats, NodeState, ResolutionResult, VersionConflict,
};
pub use resolver::{DependencyResolver, ResolutionOptions};
pub use types::{DependencySpec, DependencyType, ToolSpec, VersionConstraint};
pub use version::{Version, VersionMatcher, VersionRange};
pub type Result<T> = std::result::Result<T, Error>;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("Tool '{tool}' not found")]
ToolNotFound { tool: String },
#[error("Circular dependency detected: {cycle:?}")]
CircularDependency { cycle: Vec<String> },
#[error("Version conflict for tool '{tool}': required {required}, found {found}")]
VersionConflict {
tool: String,
required: String,
found: String,
},
#[error("Dependency resolution failed: {message}")]
ResolutionFailed { message: String },
#[error("Invalid version constraint: {constraint}")]
InvalidVersionConstraint { constraint: String },
#[error("Tool '{tool}' has unresolvable dependencies: {dependencies:?}")]
UnresolvableDependencies {
tool: String,
dependencies: Vec<String>,
},
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("Other error: {0}")]
Other(#[from] anyhow::Error),
}
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version_info() {
assert!(!VERSION.is_empty());
}
}