educe/
support_traits.rs

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}