diff options
Diffstat (limited to 'vendor/educe/src/supported_traits.rs')
| -rw-r--r-- | vendor/educe/src/supported_traits.rs | 88 |
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, + } + } +} |
