Skip to main content

just_lsp/
group.rs

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}