radix_engine/blueprints/util/
name_checker.rs1use 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}