rez_next_common/
utils.rs

1//! Utility functions for rez-core
2
3/// Get the number of threads to use for parallel operations
4pub fn get_thread_count(config_threads: Option<usize>) -> usize {
5    config_threads.unwrap_or_else(|| {
6        std::thread::available_parallelism()
7            .map(|n| n.get())
8            .unwrap_or(4)
9    })
10}
11
12/// Validate a package name
13pub fn is_valid_package_name(name: &str) -> bool {
14    !name.is_empty()
15        && name
16            .chars()
17            .all(|c| c.is_alphanumeric() || c == '_' || c == '-')
18        && !name.starts_with('-')
19        && !name.ends_with('-')
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_thread_count() {
28        assert!(get_thread_count(None) >= 1);
29        assert_eq!(get_thread_count(Some(8)), 8);
30    }
31
32    #[test]
33    fn test_package_name_validation() {
34        assert!(is_valid_package_name("valid_package"));
35        assert!(is_valid_package_name("valid-package"));
36        assert!(is_valid_package_name("package123"));
37
38        assert!(!is_valid_package_name(""));
39        assert!(!is_valid_package_name("-invalid"));
40        assert!(!is_valid_package_name("invalid-"));
41        assert!(!is_valid_package_name("invalid package"));
42    }
43}