radix_engine/blueprints/util/
name_checker.rs

1use radix_common::prelude::*;
2
3pub fn check_name(name: &str) -> Result<(), InvalidNameError> {
4    let mut iter = name.chars().enumerate();
5    match iter.next() {
6        Some((_, 'A'..='Z' | 'a'..='z' | '_')) => {
7            for (index, char) in iter {
8                if !matches!(char, '0'..='9' | 'A'..='Z' | 'a'..='z' | '_') {
9                    return Err(InvalidNameError::InvalidChar {
10                        name: name.to_owned(),
11                        violating_char: char.to_string(),
12                        index: index,
13                    });
14                }
15            }
16            Ok(())
17        }
18        Some((index, char)) => Err(InvalidNameError::InvalidChar {
19            name: name.to_owned(),
20            violating_char: char.to_string(),
21            index,
22        }),
23        None => Err(InvalidNameError::EmptyString),
24    }
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, ScryptoSbor)]
28pub enum InvalidNameError {
29    EmptyString,
30    InvalidChar {
31        name: String,
32        violating_char: String,
33        index: usize,
34    },
35}