summaryrefslogtreecommitdiffstats
path: root/src/validate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/validate.rs')
-rw-r--r--src/validate.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/validate.rs b/src/validate.rs
index 250f172..b96c477 100644
--- a/src/validate.rs
+++ b/src/validate.rs
@@ -9,6 +9,8 @@ pub(crate) fn validate(data: &Data) -> Result<(), Error> {
validate_team_members(data, &mut errors);
validate_inactive_members(data, &mut errors);
validate_list_email_addresses(data, &mut errors);
+ validate_list_extra_people(data, &mut errors);
+ validate_list_extra_teams(data, &mut errors);
if !errors.is_empty() {
for err in &errors {
@@ -82,6 +84,36 @@ fn validate_list_email_addresses(data: &Data, errors: &mut Vec<String>) {
});
}
+/// Ensure members of extra-people in a list are real people
+fn validate_list_extra_people(data: &Data, errors: &mut Vec<String>) {
+ wrapper(data.teams(), errors, |team, errors| {
+ wrapper(team.raw_lists().iter(), errors, |list, _| {
+ for person in &list.extra_people {
+ if data.person(person).is_none() {
+ bail!("person `{}` does not exist (in list `{}`)", person, list.address);
+ }
+ }
+ Ok(())
+ });
+ Ok(())
+ });
+}
+
+/// Ensure members of extra-people in a list are real people
+fn validate_list_extra_teams(data: &Data, errors: &mut Vec<String>) {
+ wrapper(data.teams(), errors, |team, errors| {
+ wrapper(team.raw_lists().iter(), errors, |list, _| {
+ for list_team in &list.extra_teams {
+ if data.team(list_team).is_none() {
+ bail!("team `{}` does not exist (in list `{}`)", list_team, list.address);
+ }
+ }
+ Ok(())
+ });
+ Ok(())
+ });
+}
+
fn wrapper<T, I, F>(iter: I, errors: &mut Vec<String>, mut func: F)
where
I: Iterator<Item = T>,