collage_core/
lib.rs

1//! Shared functions for [`collage`] and [`collage-macros`].
2//!
3//! [`collage`]: https://crates.io/crates/collage
4//! [`collage-macros`]: https://crates.io/crates/collage-macros
5
6#![no_std]
7#![forbid(unsafe_code)]
8
9pub fn is_valid_attr_key(attr: &str) -> bool {
10    let attr = attr.split_once('=').map(|(k, _)| k).unwrap_or_else(|| attr);
11    let mut chars = attr.chars();
12    chars
13        .next()
14        .is_some_and(|c| c.is_alphanumeric() || c == '_' || c == ':')
15        && chars.all(|c| c.is_alphanumeric() || c == '_' || c == ':' || c == '-' || c == '.')
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn is_valid() {
24        assert!(is_valid_attr_key("id"));
25        assert!(is_valid_attr_key("data-var"));
26        assert!(!is_valid_attr_key("'data-var"));
27        assert!(is_valid_attr_key(r#"id="foo""#));
28    }
29}