1#[cfg(not(any(
2 feature = "Debug",
3 feature = "PartialEq",
4 feature = "Eq",
5 feature = "PartialOrd",
6 feature = "Ord",
7 feature = "Hash",
8 feature = "Default",
9 feature = "Clone",
10 feature = "Copy",
11 feature = "Deref",
12 feature = "DerefMut"
13)))]
14compile_error!("at least one of the trait features must be enabled");
15
16#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Ordinalize)]
17#[cfg_attr(not(feature = "default"), allow(dead_code))]
18pub enum Trait {
19 #[cfg(feature = "Debug")]
20 Debug,
21 #[cfg(feature = "PartialEq")]
22 PartialEq,
23 #[cfg(feature = "Eq")]
24 Eq,
25 #[cfg(feature = "PartialOrd")]
26 PartialOrd,
27 #[cfg(feature = "Ord")]
28 Ord,
29 #[cfg(feature = "Hash")]
30 Hash,
31 #[cfg(feature = "Default")]
32 Default,
33 #[cfg(feature = "Clone")]
34 Clone,
35 #[cfg(feature = "Copy")]
36 Copy,
37 #[cfg(feature = "Deref")]
38 Deref,
39 #[cfg(feature = "DerefMut")]
40 DerefMut,
41}
42
43impl Trait {
44 #[inline]
45 pub fn from_str<S: AsRef<str>>(s: S) -> Trait {
46 let s = s.as_ref();
47
48 match s {
49 #[cfg(feature = "Debug")]
50 "Debug" => Trait::Debug,
51 #[cfg(feature = "PartialEq")]
52 "PartialEq" => Trait::PartialEq,
53 #[cfg(feature = "Eq")]
54 "Eq" => Trait::Eq,
55 #[cfg(feature = "PartialOrd")]
56 "PartialOrd" => Trait::PartialOrd,
57 #[cfg(feature = "Ord")]
58 "Ord" => Trait::Ord,
59 #[cfg(feature = "Hash")]
60 "Hash" => Trait::Hash,
61 #[cfg(feature = "Default")]
62 "Default" => Trait::Default,
63 #[cfg(feature = "Clone")]
64 "Clone" => Trait::Clone,
65 #[cfg(feature = "Copy")]
66 "Copy" => Trait::Copy,
67 #[cfg(feature = "Deref")]
68 "Deref" => Trait::Deref,
69 #[cfg(feature = "DerefMut")]
70 "DerefMut" => Trait::DerefMut,
71 _ => panic!("Unsupported trait `{}`. Available traits are {:?}", s, Trait::variants()),
72 }
73 }
74}