1pub fn validate_bus_name(name: &str) -> Result<(), String> {
2 if name.is_empty() || !name.chars().all(is_allowed_name_char) {
3 return Err(format!(
4 "invalid bus name '{name}': expected [A-Za-z0-9_-]+"
5 ));
6 }
7 Ok(())
8}
9
10fn is_allowed_name_char(ch: char) -> bool {
11 ch.is_ascii_alphanumeric() || ch == '_' || ch == '-'
12}
13
14#[cfg(test)]
15mod tests {
16 use super::validate_bus_name;
17
18 #[test]
19 fn accepts_alnum_underscore_dash_names() {
20 assert!(validate_bus_name("vehicle_1-a").is_ok());
21 }
22
23 #[test]
24 fn rejects_invalid_names() {
25 for name in ["", "bus:name", "two words", "name/segment"] {
26 assert!(validate_bus_name(name).is_err(), "name should fail: {name}");
27 }
28 }
29}