pacenotes_server/store/
requires_check.rs1pub fn requires_problems(manifest: &pacenotes_shared::Manifest) -> Vec<String> {
4 let mut problems = Vec::new();
5 for package in &manifest.packages {
6 let owner = format!("{}/{}", package.directory, package.name);
7 for text in &package.requires {
8 let Some(reference) = pacenotes_shared::PackageRef::parse(text) else {
9 problems.push(format!(
10 "{owner} requires {text:?}, which is not a \"directory/name\" reference"
11 ));
12 continue;
13 };
14 let Some(dependency) = manifest.get(&package.game, &reference) else {
15 problems.push(format!(
16 "{} {owner} requires {reference}, which does not exist in game {}",
17 package.game, package.game
18 ));
19 continue;
20 };
21 if package.is_public() && !dependency.is_public() {
22 problems.push(format!(
23 "{owner} is public but requires {reference}, which is not — \
24 anonymous users would see a package they cannot complete"
25 ));
26 }
27 }
28 }
29 problems
30}