educe/
supported_traits.rs1#[cfg(not(any(
2 feature = "Debug",
3 feature = "Clone",
4 feature = "Copy",
5 feature = "PartialEq",
6 feature = "Eq",
7 feature = "PartialOrd",
8 feature = "Ord",
9 feature = "Hash",
10 feature = "Default",
11 feature = "Deref",
12 feature = "DerefMut",
13 feature = "Into",
14)))]
15compile_error!("at least one of the trait features must be enabled");
16
17use enum_ordinalize::Ordinalize;
18use syn::Path;
19
20#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Ordinalize)]
21#[ordinalize(impl_trait = false)]
22#[ordinalize(variants(pub(crate) const VARIANTS))]
23pub(crate) enum Trait {
24 #[cfg(feature = "Debug")]
25 Debug,
26 #[cfg(feature = "Clone")]
27 Clone,
28 #[cfg(feature = "Copy")]
29 Copy,
30 #[cfg(feature = "PartialEq")]
31 PartialEq,
32 #[cfg(feature = "Eq")]
33 Eq,
34 #[cfg(feature = "PartialOrd")]
35 PartialOrd,
36 #[cfg(feature = "Ord")]
37 Ord,
38 #[cfg(feature = "Hash")]
39 Hash,
40 #[cfg(feature = "Default")]
41 Default,
42 #[cfg(feature = "Deref")]
43 Deref,
44 #[cfg(feature = "DerefMut")]
45 DerefMut,
46 #[cfg(feature = "Into")]
47 Into,
48
49 _Nothing,
50}
51
52impl Trait {
53 #[inline]
54 pub(crate) fn from_path(path: &Path) -> Option<Self> {
55 let ident_string = match path.get_ident() {
56 Some(ident) => ident.to_string(),
57 None => return None,
58 };
59
60 match ident_string.as_str() {
61 #[cfg(feature = "Debug")]
62 "Debug" => Some(Self::Debug),
63 #[cfg(feature = "Clone")]
64 "Clone" => Some(Self::Clone),
65 #[cfg(feature = "Copy")]
66 "Copy" => Some(Self::Copy),
67 #[cfg(feature = "PartialEq")]
68 "PartialEq" => Some(Self::PartialEq),
69 #[cfg(feature = "Eq")]
70 "Eq" => Some(Self::Eq),
71 #[cfg(feature = "PartialOrd")]
72 "PartialOrd" => Some(Self::PartialOrd),
73 #[cfg(feature = "Ord")]
74 "Ord" => Some(Self::Ord),
75 #[cfg(feature = "Hash")]
76 "Hash" => Some(Self::Hash),
77 #[cfg(feature = "Default")]
78 "Default" => Some(Self::Default),
79 #[cfg(feature = "Deref")]
80 "Deref" => Some(Self::Deref),
81 #[cfg(feature = "DerefMut")]
82 "DerefMut" => Some(Self::DerefMut),
83 #[cfg(feature = "Into")]
84 "Into" => Some(Self::Into),
85 _ => None,
86 }
87 }
88}