| use proc_macro2::{Ident, Span}; |
| |
| #[derive(Copy, Clone)] |
| pub struct Derive { |
| pub what: Trait, |
| pub span: Span, |
| } |
| |
| #[derive(Copy, Clone, PartialEq)] |
| pub enum Trait { |
| Clone, |
| Copy, |
| Debug, |
| Eq, |
| Ord, |
| PartialEq, |
| PartialOrd, |
| } |
| |
| impl Derive { |
| pub fn from(ident: &Ident) -> Option<Self> { |
| let what = match ident.to_string().as_str() { |
| "Clone" => Trait::Clone, |
| "Copy" => Trait::Copy, |
| "Debug" => Trait::Debug, |
| "Eq" => Trait::Eq, |
| "Ord" => Trait::Ord, |
| "PartialEq" => Trait::PartialEq, |
| "PartialOrd" => Trait::PartialOrd, |
| _ => return None, |
| }; |
| let span = ident.span(); |
| Some(Derive { what, span }) |
| } |
| } |
| |
| impl PartialEq<Trait> for Derive { |
| fn eq(&self, other: &Trait) -> bool { |
| self.what == *other |
| } |
| } |
| |
| pub fn contains(derives: &[Derive], query: Trait) -> bool { |
| derives.iter().any(|derive| derive.what == query) |
| } |