aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/from_id.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/from_id.rs')
-rw-r--r--crates/ra_hir/src/from_id.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs
new file mode 100644
index 000000000..c08203bca
--- /dev/null
+++ b/crates/ra_hir/src/from_id.rs
@@ -0,0 +1,58 @@
1use hir_def::{AdtId, EnumVariantId, ModuleDefId};
2
3use crate::{Adt, EnumVariant, ModuleDef};
4
5macro_rules! from_id {
6 ($(($id:path, $ty:path)),*) => {$(
7 impl From<$id> for $ty {
8 fn from(id: $id) -> $ty {
9 $ty { id }
10 }
11 }
12 )*}
13}
14
15from_id![
16 (hir_def::ModuleId, crate::Module),
17 (hir_def::StructId, crate::Struct),
18 (hir_def::UnionId, crate::Union),
19 (hir_def::EnumId, crate::Enum),
20 (hir_def::TypeAliasId, crate::TypeAlias),
21 (hir_def::TraitId, crate::Trait),
22 (hir_def::StaticId, crate::Static),
23 (hir_def::ConstId, crate::Const),
24 (hir_def::FunctionId, crate::Function),
25 (hir_expand::MacroDefId, crate::MacroDef)
26];
27
28impl From<AdtId> for Adt {
29 fn from(id: AdtId) -> Self {
30 match id {
31 AdtId::StructId(it) => Adt::Struct(it.into()),
32 AdtId::UnionId(it) => Adt::Union(it.into()),
33 AdtId::EnumId(it) => Adt::Enum(it.into()),
34 }
35 }
36}
37
38impl From<EnumVariantId> for EnumVariant {
39 fn from(id: EnumVariantId) -> Self {
40 EnumVariant { parent: id.parent.into(), id: id.local_id }
41 }
42}
43
44impl From<ModuleDefId> for ModuleDef {
45 fn from(id: ModuleDefId) -> Self {
46 match id {
47 ModuleDefId::ModuleId(it) => ModuleDef::Module(it.into()),
48 ModuleDefId::FunctionId(it) => ModuleDef::Function(it.into()),
49 ModuleDefId::AdtId(it) => ModuleDef::Adt(it.into()),
50 ModuleDefId::EnumVariantId(it) => ModuleDef::EnumVariant(it.into()),
51 ModuleDefId::ConstId(it) => ModuleDef::Const(it.into()),
52 ModuleDefId::StaticId(it) => ModuleDef::Static(it.into()),
53 ModuleDefId::TraitId(it) => ModuleDef::Trait(it.into()),
54 ModuleDefId::TypeAliasId(it) => ModuleDef::TypeAlias(it.into()),
55 ModuleDefId::BuiltinType(it) => ModuleDef::BuiltinType(it),
56 }
57 }
58}