| David Tolnay | 4c6052d | 2020-12-31 15:01:04 -0800 | [diff] [blame] | 1 | use crate::syntax::Type; |
| 2 | use proc_macro2::Ident; |
| 3 | |
| David Tolnay | e352c1e | 2020-12-31 16:41:05 -0800 | [diff] [blame^] | 4 | #[derive(Copy, Clone, PartialEq, Eq, Hash)] |
| David Tolnay | 4c6052d | 2020-12-31 15:01:04 -0800 | [diff] [blame] | 5 | pub enum ImplKey<'a> { |
| 6 | RustBox(&'a Ident), |
| 7 | RustVec(&'a Ident), |
| 8 | UniquePtr(&'a Ident), |
| 9 | SharedPtr(&'a Ident), |
| 10 | WeakPtr(&'a Ident), |
| 11 | CxxVector(&'a Ident), |
| 12 | } |
| 13 | |
| 14 | impl Type { |
| 15 | pub(crate) fn impl_key(&self) -> Option<ImplKey> { |
| 16 | if let Type::RustBox(ty) = self { |
| 17 | if let Type::Ident(ident) = &ty.inner { |
| 18 | return Some(ImplKey::RustBox(&ident.rust)); |
| 19 | } |
| 20 | } else if let Type::RustVec(ty) = self { |
| 21 | if let Type::Ident(ident) = &ty.inner { |
| 22 | return Some(ImplKey::RustVec(&ident.rust)); |
| 23 | } |
| 24 | } else if let Type::UniquePtr(ty) = self { |
| 25 | if let Type::Ident(ident) = &ty.inner { |
| 26 | return Some(ImplKey::UniquePtr(&ident.rust)); |
| 27 | } |
| 28 | } else if let Type::SharedPtr(ty) = self { |
| 29 | if let Type::Ident(ident) = &ty.inner { |
| 30 | return Some(ImplKey::SharedPtr(&ident.rust)); |
| 31 | } |
| 32 | } else if let Type::WeakPtr(ty) = self { |
| 33 | if let Type::Ident(ident) = &ty.inner { |
| 34 | return Some(ImplKey::WeakPtr(&ident.rust)); |
| 35 | } |
| 36 | } else if let Type::CxxVector(ty) = self { |
| 37 | if let Type::Ident(ident) = &ty.inner { |
| 38 | return Some(ImplKey::CxxVector(&ident.rust)); |
| 39 | } |
| 40 | } |
| 41 | None |
| 42 | } |
| 43 | } |