diff options
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r-- | crates/ra_hir/src/adt.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index b44f59f0b..03770ed7d 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs | |||
@@ -22,6 +22,10 @@ impl Struct { | |||
22 | self.def_id | 22 | self.def_id |
23 | } | 23 | } |
24 | 24 | ||
25 | pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<VariantData>> { | ||
26 | Ok(db.struct_data(self.def_id)?.variant_data.clone()) | ||
27 | } | ||
28 | |||
25 | pub fn struct_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<StructData>> { | 29 | pub fn struct_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<StructData>> { |
26 | Ok(db.struct_data(self.def_id)?) | 30 | Ok(db.struct_data(self.def_id)?) |
27 | } | 31 | } |
@@ -162,6 +166,11 @@ impl VariantData { | |||
162 | StructFlavor::Unit => VariantData::Unit, | 166 | StructFlavor::Unit => VariantData::Unit, |
163 | }) | 167 | }) |
164 | } | 168 | } |
169 | |||
170 | pub(crate) fn get_field_ty(&self, field_name: &str) -> Option<Ty> { | ||
171 | self.fields().iter().find(|f| f.name == field_name).map(|f| f.ty.clone()) | ||
172 | } | ||
173 | |||
165 | pub fn fields(&self) -> &[StructField] { | 174 | pub fn fields(&self) -> &[StructField] { |
166 | match *self { | 175 | match *self { |
167 | VariantData::Struct(ref fields) | VariantData::Tuple(ref fields) => fields, | 176 | VariantData::Struct(ref fields) | VariantData::Tuple(ref fields) => fields, |