1use crate::{Span, ToSpan};
2use allocator_api2::alloc::Allocator;
3use csskit_arena::{Box, Vec};
4
5impl<'a, T: ToSpan, A: Allocator> ToSpan for Box<'a, T, A> {
6 fn to_span(&self) -> Span {
7 (**self).to_span()
8 }
9}
10
11impl<'a, T: ToSpan, A: Allocator> ToSpan for Vec<'a, T, A> {
12 fn to_span(&self) -> Span {
13 self[..].to_span()
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20 use crate::SourceOffset;
21 use csskit_arena::Arena;
22
23 #[test]
24 fn empty_vec_does_not_widen_span() {
25 let arena = Arena::default();
26 let empty: Vec<Span> = Vec::new_in(&arena);
27 let span = Span::new(SourceOffset(5), SourceOffset(9));
28 assert_eq!(empty.to_span(), Span::DUMMY);
29 assert_eq!(span + empty.to_span(), span);
30 }
31
32 #[test]
33 fn vec_spans_its_items() {
34 let arena = Arena::default();
35 let mut items = Vec::new_in(&arena);
36 items.push(Span::new(SourceOffset(5), SourceOffset(9)));
37 items.push(Span::new(SourceOffset(12), SourceOffset(20)));
38 assert_eq!(items.to_span(), Span::new(SourceOffset(5), SourceOffset(20)));
39 }
40}