summaryrefslogtreecommitdiffstats
path: root/src/validate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/validate.rs')
-rw-r--r--src/validate.rs43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/validate.rs b/src/validate.rs
index 93a87ac..97fb655 100644
--- a/src/validate.rs
+++ b/src/validate.rs
@@ -4,21 +4,28 @@ use failure::{bail, ensure, Error};
use regex::Regex;
use std::collections::HashSet;
+static CHECKS: &[fn(&Data, &mut Vec<String>)] = &[
+ validate_wg_names,
+ validate_subteam_of,
+ validate_team_leads,
+ validate_team_members,
+ validate_inactive_members,
+ validate_list_email_addresses,
+ validate_list_extra_people,
+ validate_list_extra_teams,
+ validate_list_addresses,
+ validate_people_addresses,
+ validate_discord_name,
+ validate_duplicate_permissions,
+ validate_permissions,
+];
+
pub(crate) fn validate(data: &Data) -> Result<(), Error> {
let mut errors = Vec::new();
- validate_wg_names(data, &mut errors);
- validate_subteam_of(data, &mut errors);
- validate_team_leads(data, &mut errors);
- 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);
- validate_list_addresses(data, &mut errors);
- validate_people_addresses(data, &mut errors);
- validate_discord_name(data, &mut errors);
- validate_duplicate_permissions(data, &mut errors);
+ for check in CHECKS {
+ check(data, &mut errors);
+ }
if !errors.is_empty() {
errors.sort();
@@ -260,6 +267,18 @@ fn validate_duplicate_permissions(data: &Data, errors: &mut Vec<String>) {
});
}
+/// Ensure the permissions are valid
+fn validate_permissions(data: &Data, errors: &mut Vec<String>) {
+ wrapper(data.teams(), errors, |team, _| {
+ team.permissions().validate(format!("team `{}`", team.name()))?;
+ Ok(())
+ });
+ wrapper(data.people(), errors, |person, _| {
+ person.permissions().validate(format!("user `{}`", person.github()))?;
+ Ok(())
+ });
+}
+
fn wrapper<T, I, F>(iter: I, errors: &mut Vec<String>, mut func: F)
where
I: Iterator<Item = T>,