Skip to main content

agent_can/
name.rs

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}