cyrtophora

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 1260f427514333d961218b7f82b80803c70f0d76
parent 9b3451ca36d0ffcdb9731e552cc49d74e2fee8c4
Author: Jackson G. Kaindume <seestem@merely.tech>
Date:   Sun, 21 Aug 2022 11:33:39 +0200

add input validator

Diffstat:
Asrc/validator.rs | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+), 0 deletions(-)

diff --git a/src/validator.rs b/src/validator.rs @@ -0,0 +1,77 @@ +pub struct Validator; + +impl Validator { + /// Validate username (using Twitter style usernames) + pub fn username(username: &str) -> bool { + // Username cannot be empty + if username.is_empty() { + return false; + } + + // Username length cannot be greater than 15 characters + if username.len() > 15 { + return false; + } + + let chars: Vec<char> = username.chars().collect(); + let mut underscore_count = 0; + + for i in 0..chars.len() { + // Username cannot start with a underscore (_) + if i == 0 && chars[i] == '_' { + return false; + } + + // Username can only contain letters, numbers, and one underscore + if chars[i] != '_' { + if !chars[i].is_ascii_alphanumeric() { + return false; + } + } else { + // Count underscores because username can have only one [ _ ] underscore + underscore_count += 1; + } + } + + // Username can have only one [ _ ] underscore + if underscore_count > 1 { + return false; + } + + true + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn username_validation() { + let valid_username = "firephoenix"; + let valid_username1 = "natty_dread"; + let valid_username2 = "ironlion_ironii"; + let invalid_username = ""; + let invalid_username1 = "natty_dread_iron"; + let invalid_username2 = "_natty_dread_iron"; + let invalid_username3 = "nattydre@d"; + let invalid_username4 = "nattydread$"; + let invalid_username5 = "firephoenixfirephoenixfirephoenixfirephoenixfirephoenix"; + + assert!(Validator::username(valid_username)); + assert!(Validator::username(valid_username1)); + assert!(Validator::username(valid_username2)); + + // username cannot be empty + assert!(!Validator::username(invalid_username)); + // username cannot contain more than 1 underscore + assert!(!Validator::username(invalid_username1)); + // username cannot start with an underscore + assert!(!Validator::username(invalid_username2)); + // username cannot contain special symbols (only the _ is allowed) + assert!(!Validator::username(invalid_username3)); + assert!(!Validator::username(invalid_username4)); + // username cannot be more than 15 characters long + assert!(!Validator::username(invalid_username5)); + } +}