]> git.lizzy.rs Git - rust.git/blobdiff - crates/ra_hir_def/src/lib.rs
Introduce `ContainerId`
[rust.git] / crates / ra_hir_def / src / lib.rs
index 3d42762aeff350b38038594ed706873dabb6ec89..5e46db1aabd3facd556c3f6412f2c4a6dbb83e1a 100644 (file)
@@ -331,12 +331,18 @@ pub struct TypeParamId {
 impl_arena_id!(LocalTypeParamId);
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
-pub enum AssocContainerId {
+pub enum ContainerId {
     ModuleId(ModuleId),
+    DefWithBodyId(DefWithBodyId),
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum AssocContainerId {
+    ContainerId(ContainerId),
     ImplId(ImplId),
     TraitId(TraitId),
-    DefWithBodyId(DefWithBodyId),
 }
+impl_froms!(AssocContainerId: ContainerId);
 
 /// A Data Type
 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
@@ -479,13 +485,21 @@ pub trait HasModule {
     fn module(&self, db: &impl db::DefDatabase) -> ModuleId;
 }
 
+impl HasModule for ContainerId {
+    fn module(&self, db: &impl db::DefDatabase) -> ModuleId {
+        match *self {
+            ContainerId::ModuleId(it) => it,
+            ContainerId::DefWithBodyId(it) => it.module(db),
+        }
+    }
+}
+
 impl HasModule for AssocContainerId {
     fn module(&self, db: &impl db::DefDatabase) -> ModuleId {
         match *self {
-            AssocContainerId::ModuleId(it) => it,
+            AssocContainerId::ContainerId(it) => it.module(db),
             AssocContainerId::ImplId(it) => it.lookup(db).container,
             AssocContainerId::TraitId(it) => it.lookup(db).container,
-            AssocContainerId::DefWithBodyId(it) => it.module(db),
         }
     }
 }