Skip to main content

dada_ir_ast/ast/
util.rs

1use std::ops::Deref;
2
3use salsa::Update;
4use serde::Serialize;
5
6use crate::span::Span;
7
8#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Update, Debug, Serialize)]
9pub struct SpanVec<'db, T: Update> {
10    //                    ------ FIXME: Bug in the derive?
11    pub span: Span<'db>,
12    pub values: Vec<T>,
13}
14
15impl<T: Update> Deref for SpanVec<'_, T> {
16    type Target = Vec<T>;
17
18    fn deref(&self) -> &Self::Target {
19        &self.values
20    }
21}
22
23impl<'db, T> IntoIterator for &'db SpanVec<'db, T>
24where
25    T: Update,
26{
27    type Item = &'db T;
28
29    type IntoIter = std::slice::Iter<'db, T>;
30
31    fn into_iter(self) -> Self::IntoIter {
32        self.values.iter()
33    }
34}