2023-01-20 18:47:26 +00:00
|
|
|
use regex::Regex;
|
|
|
|
|
|
|
|
use crate::errors::ValidationError;
|
|
|
|
|
2023-03-25 10:12:55 +00:00
|
|
|
const EMOJI_NAME_RE: &str = r"^[a-zA-Z0-9._-]+$";
|
2023-01-20 18:47:26 +00:00
|
|
|
pub const EMOJI_MAX_SIZE: usize = 250 * 1000; // 250 kB
|
2023-01-17 00:09:09 +00:00
|
|
|
pub const EMOJI_LOCAL_MAX_SIZE: usize = 50 * 1000; // 50 kB
|
2023-01-22 23:45:43 +00:00
|
|
|
pub const EMOJI_MEDIA_TYPES: [&str; 3] = [
|
|
|
|
"image/apng",
|
2023-01-20 18:47:26 +00:00
|
|
|
"image/gif",
|
|
|
|
"image/png",
|
|
|
|
];
|
|
|
|
|
|
|
|
pub fn validate_emoji_name(emoji_name: &str) -> Result<(), ValidationError> {
|
|
|
|
let name_re = Regex::new(EMOJI_NAME_RE).unwrap();
|
|
|
|
if !name_re.is_match(emoji_name) {
|
|
|
|
return Err(ValidationError("invalid emoji name"));
|
|
|
|
};
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_validate_emoji_name() {
|
|
|
|
let valid_name = "emoji_name";
|
|
|
|
let result = validate_emoji_name(valid_name);
|
|
|
|
assert!(result.is_ok());
|
|
|
|
|
2023-03-25 10:12:55 +00:00
|
|
|
let valid_name = "01-emoji-name";
|
|
|
|
let result = validate_emoji_name(valid_name);
|
|
|
|
assert!(result.is_ok());
|
|
|
|
|
2023-01-20 18:47:26 +00:00
|
|
|
let invalid_name = "emoji\"<script>";
|
|
|
|
let result = validate_emoji_name(invalid_name);
|
|
|
|
assert!(result.is_err());
|
|
|
|
}
|
|
|
|
}
|