]> git.lizzy.rs Git - rust.git/blobdiff - crates/ra_hir_def/src/lang_item.rs
Add helpers for unpacking lang items
[rust.git] / crates / ra_hir_def / src / lang_item.rs
index cef061837b6f9df804ecacf51902668f8425ee85..37c861a877b1c6c25b825389c12243f53a1e6a28 100644 (file)
@@ -22,6 +22,50 @@ pub enum LangItemTarget {
     TraitId(TraitId),
 }
 
+impl LangItemTarget {
+    pub fn as_enum(self) -> Option<EnumId> {
+        match self {
+            LangItemTarget::EnumId(id) => Some(id),
+            _ => None,
+        }
+    }
+
+    pub fn as_function(self) -> Option<FunctionId> {
+        match self {
+            LangItemTarget::FunctionId(id) => Some(id),
+            _ => None,
+        }
+    }
+
+    pub fn as_impl_block(self) -> Option<ImplId> {
+        match self {
+            LangItemTarget::ImplBlockId(id) => Some(id),
+            _ => None,
+        }
+    }
+
+    pub fn as_static(self) -> Option<StaticId> {
+        match self {
+            LangItemTarget::StaticId(id) => Some(id),
+            _ => None,
+        }
+    }
+
+    pub fn as_struct(self) -> Option<StructId> {
+        match self {
+            LangItemTarget::StructId(id) => Some(id),
+            _ => None,
+        }
+    }
+
+    pub fn as_trait(self) -> Option<TraitId> {
+        match self {
+            LangItemTarget::TraitId(id) => Some(id),
+            _ => None,
+        }
+    }
+}
+
 #[derive(Default, Debug, Clone, PartialEq, Eq)]
 pub struct LangItems {
     items: FxHashMap<SmolStr, LangItemTarget>,