blob: ed3eff8330c255e31016647cc516c18cdcaaf3d0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
use unicode_segmentation::UnicodeSegmentation as _;
use crate::name::Name;
// Picked out of a hat. The power of two is not meaningful.
const NAME_TOO_LONG: usize = 64;
pub fn name(name: &Name) -> bool {
let display = name.display();
[
display.graphemes(true).count() < NAME_TOO_LONG,
display.chars().all(|ch| !ch.is_control()),
display.chars().next().is_some_and(char::is_alphanumeric),
display.chars().last().is_some_and(char::is_alphanumeric),
display
.chars()
.zip(display.chars().skip(1))
.all(|(a, b)| !(a.is_whitespace() && b.is_whitespace())),
]
.into_iter()
.all(|value| value)
}
|