1pub 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
12pub 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}