use std::fmt;
use semver::VersionReq;
use crate::core::{PackageId, PackageName, SourceId, Summary};
#[derive(Clone, Eq, PartialEq, Hash)]
pub struct ManifestDependency {
pub name: PackageName,
pub version_req: VersionReq,
pub source_id: SourceId,
}
impl ManifestDependency {
pub fn matches_summary(&self, summary: &Summary) -> bool {
self.matches_package_id(summary.package_id)
}
pub fn matches_package_id(&self, package_id: PackageId) -> bool {
package_id.name == self.name && self.version_req.matches(&package_id.version)
}
}
impl fmt::Display for ManifestDependency {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{} {}", self.name, self.version_req)?;
if !self.source_id.is_default_registry() {
write!(f, " ({})", self.source_id)?;
}
Ok(())
}
}
impl fmt::Debug for ManifestDependency {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "ManifestDependency({self})")
}
}