summaryrefslogtreecommitdiffstats
path: root/src/validate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/validate.rs')
-rw-r--r--src/validate.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/validate.rs b/src/validate.rs
index 0ff43fe..c1680ce 100644
--- a/src/validate.rs
+++ b/src/validate.rs
@@ -1,6 +1,7 @@
use crate::data::Data;
-use std::collections::HashSet;
use failure::{Error, bail};
+use regex::Regex;
+use std::collections::HashSet;
pub(crate) fn validate(data: &Data) -> Result<(), Error> {
let mut errors = Vec::new();
@@ -11,6 +12,7 @@ pub(crate) fn validate(data: &Data) -> Result<(), Error> {
validate_list_email_addresses(data, &mut errors);
validate_list_extra_people(data, &mut errors);
validate_list_extra_teams(data, &mut errors);
+ validate_discord_name(data, &mut errors);
if !errors.is_empty() {
errors.sort();
@@ -117,6 +119,20 @@ fn validate_list_extra_teams(data: &Data, errors: &mut Vec<String>) {
});
}
+/// Ensure the Discord name is formatted properly
+fn validate_discord_name(data: &Data, errors: &mut Vec<String>) {
+ // https://discordapp.com/developers/docs/resources/user#usernames-and-nicknames
+ let name_re = Regex::new(r"^[^@#:`]{2,32}#[0-9]{4}$").unwrap();
+ wrapper(data.people(), errors, |person, _| {
+ if let Some(name) = person.discord() {
+ if !name_re.is_match(name) {
+ bail!("user `{}` has an invalid discord name: {}", person.github(), name);
+ }
+ }
+ Ok(())
+ })
+}
+
fn wrapper<T, I, F>(iter: I, errors: &mut Vec<String>, mut func: F)
where
I: Iterator<Item = T>,