summaryrefslogtreecommitdiff
path: root/vendor/educe/src/supported_traits.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/educe/src/supported_traits.rs')
-rw-r--r--vendor/educe/src/supported_traits.rs88
1 files changed, 88 insertions, 0 deletions
diff --git a/vendor/educe/src/supported_traits.rs b/vendor/educe/src/supported_traits.rs
new file mode 100644
index 00000000..50f7f302
--- /dev/null
+++ b/vendor/educe/src/supported_traits.rs
@@ -0,0 +1,88 @@
+#[cfg(not(any(
+ feature = "Debug",
+ feature = "Clone",
+ feature = "Copy",
+ feature = "PartialEq",
+ feature = "Eq",
+ feature = "PartialOrd",
+ feature = "Ord",
+ feature = "Hash",
+ feature = "Default",
+ feature = "Deref",
+ feature = "DerefMut",
+ feature = "Into",
+)))]
+compile_error!("at least one of the trait features must be enabled");
+
+use enum_ordinalize::Ordinalize;
+use syn::Path;
+
+#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Ordinalize)]
+#[ordinalize(impl_trait = false)]
+#[ordinalize(variants(pub(crate) const VARIANTS))]
+pub(crate) enum Trait {
+ #[cfg(feature = "Debug")]
+ Debug,
+ #[cfg(feature = "Clone")]
+ Clone,
+ #[cfg(feature = "Copy")]
+ Copy,
+ #[cfg(feature = "PartialEq")]
+ PartialEq,
+ #[cfg(feature = "Eq")]
+ Eq,
+ #[cfg(feature = "PartialOrd")]
+ PartialOrd,
+ #[cfg(feature = "Ord")]
+ Ord,
+ #[cfg(feature = "Hash")]
+ Hash,
+ #[cfg(feature = "Default")]
+ Default,
+ #[cfg(feature = "Deref")]
+ Deref,
+ #[cfg(feature = "DerefMut")]
+ DerefMut,
+ #[cfg(feature = "Into")]
+ Into,
+
+ _Nothing,
+}
+
+impl Trait {
+ #[inline]
+ pub(crate) fn from_path(path: &Path) -> Option<Self> {
+ let ident_string = match path.get_ident() {
+ Some(ident) => ident.to_string(),
+ None => return None,
+ };
+
+ match ident_string.as_str() {
+ #[cfg(feature = "Debug")]
+ "Debug" => Some(Self::Debug),
+ #[cfg(feature = "Clone")]
+ "Clone" => Some(Self::Clone),
+ #[cfg(feature = "Copy")]
+ "Copy" => Some(Self::Copy),
+ #[cfg(feature = "PartialEq")]
+ "PartialEq" => Some(Self::PartialEq),
+ #[cfg(feature = "Eq")]
+ "Eq" => Some(Self::Eq),
+ #[cfg(feature = "PartialOrd")]
+ "PartialOrd" => Some(Self::PartialOrd),
+ #[cfg(feature = "Ord")]
+ "Ord" => Some(Self::Ord),
+ #[cfg(feature = "Hash")]
+ "Hash" => Some(Self::Hash),
+ #[cfg(feature = "Default")]
+ "Default" => Some(Self::Default),
+ #[cfg(feature = "Deref")]
+ "Deref" => Some(Self::Deref),
+ #[cfg(feature = "DerefMut")]
+ "DerefMut" => Some(Self::DerefMut),
+ #[cfg(feature = "Into")]
+ "Into" => Some(Self::Into),
+ _ => None,
+ }
+ }
+}