use shep_core::dogs::manifest::Manifest;
use crate::output::Streams;
const DOG_DEPENDENCY_NOTICE: &str = "dog_dependency_missing";
const DOG_SHEP_TOO_OLD_NOTICE: &str = "dog_needs_newer_shep";
pub(super) fn warn_of_unmet_depends(
streams: &mut Streams<'_>,
name: &str,
manifest: &Manifest,
adopted: &[String],
) {
for dependency in &manifest.depends.dogs {
let present = crate::dog::BUILT_IN_DOGS.contains(&dependency.name.as_str())
|| adopted.contains(&dependency.name);
if !present {
let message = format!(
"`{name}` depends on `{dep}`, which is not adopted, so `{name}` may not work \
until you run `shep adopt` for `{dep}`",
dep = dependency.name
);
streams.aside(DOG_DEPENDENCY_NOTICE, &message);
}
}
let Some(minimum) = &manifest.depends.shep else {
return;
};
let this = env!("CARGO_PKG_VERSION");
let too_old = match (
semver::Version::parse(minimum),
semver::Version::parse(this),
) {
(Ok(minimum), Ok(this)) => this < minimum,
_ => false,
};
if too_old {
let message = format!(
"`{name}` needs shep {minimum} or newer, and this is shep {this}, so `{name}` may \
not work until you upgrade shep"
);
streams.aside(DOG_SHEP_TOO_OLD_NOTICE, &message);
}
}