aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/item_tree.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def/src/item_tree.rs')
-rw-r--r--crates/ra_hir_def/src/item_tree.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/crates/ra_hir_def/src/item_tree.rs b/crates/ra_hir_def/src/item_tree.rs
index fd874750e..8c93e3adf 100644
--- a/crates/ra_hir_def/src/item_tree.rs
+++ b/crates/ra_hir_def/src/item_tree.rs
@@ -699,18 +699,19 @@ pub struct Variant {
699} 699}
700 700
701#[derive(Debug, Clone, PartialEq, Eq)] 701#[derive(Debug, Clone, PartialEq, Eq)]
702pub struct FieldIds { 702pub struct IdRange<T> {
703 range: Range<u32>, 703 range: Range<u32>,
704 _p: PhantomData<T>,
704} 705}
705 706
706impl FieldIds { 707impl<T> IdRange<T> {
707 fn new(range: Range<Idx<Field>>) -> Self { 708 fn new(range: Range<Idx<T>>) -> Self {
708 Self { range: range.start.into_raw().into()..range.end.into_raw().into() } 709 Self { range: range.start.into_raw().into()..range.end.into_raw().into(), _p: PhantomData }
709 } 710 }
710} 711}
711 712
712impl Iterator for FieldIds { 713impl<T> Iterator for IdRange<T> {
713 type Item = Idx<Field>; 714 type Item = Idx<T>;
714 fn next(&mut self) -> Option<Self::Item> { 715 fn next(&mut self) -> Option<Self::Item> {
715 self.range.next().map(|raw| Idx::from_raw(raw.into())) 716 self.range.next().map(|raw| Idx::from_raw(raw.into()))
716 } 717 }
@@ -718,8 +719,8 @@ impl Iterator for FieldIds {
718 719
719#[derive(Debug, Clone, PartialEq, Eq)] 720#[derive(Debug, Clone, PartialEq, Eq)]
720pub enum Fields { 721pub enum Fields {
721 Record(FieldIds), 722 Record(IdRange<Field>),
722 Tuple(FieldIds), 723 Tuple(IdRange<Field>),
723 Unit, 724 Unit,
724} 725}
725 726