radix-engine 1.3.1

Reference implementation of Radix Engine, from the Radix DLT project.
Documentation
use radix_common::prelude::*;

pub fn check_name(name: &str) -> Result<(), InvalidNameError> {
    let mut iter = name.chars().enumerate();
    match iter.next() {
        Some((_, 'A'..='Z' | 'a'..='z' | '_')) => {
            for (index, char) in iter {
                if !matches!(char, '0'..='9' | 'A'..='Z' | 'a'..='z' | '_') {
                    return Err(InvalidNameError::InvalidChar {
                        name: name.to_owned(),
                        violating_char: char.to_string(),
                        index,
                    });
                }
            }
            Ok(())
        }
        Some((index, char)) => Err(InvalidNameError::InvalidChar {
            name: name.to_owned(),
            violating_char: char.to_string(),
            index,
        }),
        None => Err(InvalidNameError::EmptyString),
    }
}

#[derive(Debug, Clone, PartialEq, Eq, ScryptoSbor)]
pub enum InvalidNameError {
    EmptyString,
    InvalidChar {
        name: String,
        violating_char: String,
        index: usize,
    },
}