From 56329833966d8d6067398ed4e6e47cad4b221e05 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Tue, 27 Nov 2018 14:44:49 +0100 Subject: add discord name support fixes #1 --- src/schema.rs | 5 +++++ src/validate.rs | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/schema.rs b/src/schema.rs index 641e282..c8579e1 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -9,6 +9,7 @@ pub(crate) struct Person { github: String, irc: Option, email: Option, + discord: Option, } impl Person { @@ -33,6 +34,10 @@ impl Person { pub(crate) fn email(&self) -> Option<&str> { self.email.as_ref().map(|e| e.as_str()) } + + pub(crate) fn discord(&self) -> Option<&str> { + self.discord.as_ref().map(|e| e.as_str()) + } } #[derive(serde_derive::Deserialize, Debug)] 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) { }); } +/// Ensure the Discord name is formatted properly +fn validate_discord_name(data: &Data, errors: &mut Vec) { + // 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(iter: I, errors: &mut Vec, mut func: F) where I: Iterator, -- cgit v1.2.3