From 31d3a56b1865c33ef54e5d76e606965c87676695 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 25 Jan 2019 01:53:07 +0300 Subject: move adt to adt --- crates/ra_hir/src/adt.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'crates/ra_hir/src/adt.rs') diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index ad3f9c405..6b13b464d 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs @@ -3,17 +3,32 @@ use std::sync::Arc; -use ra_syntax::{ - ast::{self, NameOwner, StructFlavor} -}; +use ra_syntax::ast::{self, NameOwner, StructFlavor}; use crate::{ - Name, AsName, Struct, Enum, EnumVariant, + Name, AsName, Struct, Enum, EnumVariant, Crate, HirDatabase, type_ref::TypeRef, ids::LocationCtx, }; +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum AdtDef { + Struct(Struct), + Enum(Enum), +} +impl_froms!(AdtDef: Struct, Enum); + +impl AdtDef { + pub(crate) fn krate(self, db: &impl HirDatabase) -> Option { + match self { + AdtDef::Struct(s) => s.module(db), + AdtDef::Enum(e) => e.module(db), + } + .krate(db) + } +} + impl Struct { pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc { db.struct_data((*self).into()).variant_data.clone() -- cgit v1.2.3