diff options
Diffstat (limited to 'crates/ra_hir/src/from_id.rs')
-rw-r--r-- | crates/ra_hir/src/from_id.rs | 58 |
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 @@ | |||
1 | use hir_def::{AdtId, EnumVariantId, ModuleDefId}; | ||
2 | |||
3 | use crate::{Adt, EnumVariant, ModuleDef}; | ||
4 | |||
5 | macro_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 | |||
15 | from_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 | |||
28 | impl 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 | |||
38 | impl From<EnumVariantId> for EnumVariant { | ||
39 | fn from(id: EnumVariantId) -> Self { | ||
40 | EnumVariant { parent: id.parent.into(), id: id.local_id } | ||
41 | } | ||
42 | } | ||
43 | |||
44 | impl 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 | } | ||