mod tests;
pub const NC_MAX_NAME_SIZE: usize = 256;
pub fn is_valid_name(name: &str) -> bool {
match name.chars().next() {
None => {
return false;
}
Some(c) => {
if c.is_ascii() && !(c.is_alphanumeric() || c == '_') {
return false;
}
}
}
if name.len() > NC_MAX_NAME_SIZE {
return false;
}
for c in name.chars().skip(1) {
if !(c.is_alphanumeric()) && c.is_ascii() && !(is_special_1(c) || is_special_2(c)) {
return false;
}
}
true
}
fn is_special_1(chr: char) -> bool {
chr == '_' || chr == '.' || chr == '@' || chr == '+' || chr == '-'
}
fn is_special_2(chr: char) -> bool {
chr == ' '
|| chr == '!'
|| chr == '"'
|| chr == '#'
|| chr == '$'
|| chr == '%'
|| chr == '&'
|| chr == '\''
|| chr == '('
|| chr == ')'
|| chr == '*'
|| chr == ','
|| chr == ':'
|| chr == ';'
|| chr == '<'
|| chr == '='
|| chr == '>'
|| chr == '?'
|| chr == '['
|| chr == '\\'
|| chr == ']'
|| chr == '^'
|| chr == '`'
|| chr == '{'
|| chr == '|'
|| chr == '}'
|| chr == '~'
}