Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/generics.rs')
-rw-r--r--crates/hir-def/src/generics.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/crates/hir-def/src/generics.rs b/crates/hir-def/src/generics.rs
index 8bdd9c6587..c141acd2ec 100644
--- a/crates/hir-def/src/generics.rs
+++ b/crates/hir-def/src/generics.rs
@@ -102,6 +102,46 @@ impl TypeOrConstParamData {
impl_from!(TypeParamData, ConstParamData for TypeOrConstParamData);
+#[derive(Clone, PartialEq, Eq, Debug, Hash)]
+pub enum GenericParamData {
+ TypeParamData(TypeParamData),
+ ConstParamData(ConstParamData),
+ LifetimeParamData(LifetimeParamData),
+}
+
+impl GenericParamData {
+ pub fn name(&self) -> Option<&Name> {
+ match self {
+ GenericParamData::TypeParamData(it) => it.name.as_ref(),
+ GenericParamData::ConstParamData(it) => Some(&it.name),
+ GenericParamData::LifetimeParamData(it) => Some(&it.name),
+ }
+ }
+
+ pub fn type_param(&self) -> Option<&TypeParamData> {
+ match self {
+ GenericParamData::TypeParamData(it) => Some(it),
+ _ => None,
+ }
+ }
+
+ pub fn const_param(&self) -> Option<&ConstParamData> {
+ match self {
+ GenericParamData::ConstParamData(it) => Some(it),
+ _ => None,
+ }
+ }
+
+ pub fn lifetime_param(&self) -> Option<&LifetimeParamData> {
+ match self {
+ GenericParamData::LifetimeParamData(it) => Some(it),
+ _ => None,
+ }
+ }
+}
+
+impl_from!(TypeParamData, ConstParamData, LifetimeParamData for GenericParamData);
+
/// Data about the generic parameters of a function, struct, impl, etc.
#[derive(Clone, PartialEq, Eq, Debug, Hash)]
pub struct GenericParams {