blob: 7894e0c793333aceb49deae51c27ad9bcf7b277d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
use std::ops::Not as _;
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().any(char::is_control).not(),
display.chars().next().is_some_and(|c| !c.is_whitespace()),
display.chars().last().is_some_and(|c| !c.is_whitespace()),
display
.chars()
.zip(display.chars().skip(1))
.all(|(a, b)| !(a.is_whitespace() && b.is_whitespace())),
]
.into_iter()
.all(|value| value)
}
|