1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2pub enum Group {
3 Android,
4 Any,
5 Dragonfly,
6 Freebsd,
7 Linux,
8 Macos,
9 Netbsd,
10 Openbsd,
11 Windows,
12}
13
14impl Group {
15 #[must_use]
16 pub fn conflicts_with(self, other: Group) -> bool {
17 matches!((self, other), (Group::Any, _) | (_, Group::Any)) || self == other
18 }
19
20 #[must_use]
21 pub fn targets(attribute: &str) -> Option<Vec<Self>> {
22 match attribute {
23 "android" => Some(vec![Group::Android]),
24 "dragonfly" => Some(vec![Group::Dragonfly]),
25 "freebsd" => Some(vec![Group::Freebsd]),
26 "linux" => Some(vec![Group::Linux]),
27 "macos" => Some(vec![Group::Macos]),
28 "netbsd" => Some(vec![Group::Netbsd]),
29 "openbsd" => Some(vec![Group::Openbsd]),
30 "unix" => Some(vec![
31 Group::Android,
32 Group::Dragonfly,
33 Group::Freebsd,
34 Group::Linux,
35 Group::Macos,
36 Group::Netbsd,
37 Group::Openbsd,
38 ]),
39 "windows" => Some(vec![Group::Windows]),
40 _ => None,
41 }
42 }
43}