object_rainbow/impls/
vec.rs1use std::collections::VecDeque;
2
3use crate::*;
4
5impl<T: InlineOutput> ToOutput for Vec<T> {
6 fn to_output(&self, output: &mut impl Output) {
7 T::slice_to_output(self, output);
8 }
9}
10
11impl<T: ListHashes> ListHashes for Vec<T> {
12 fn list_hashes(&self, f: &mut impl FnMut(Hash)) {
13 self.iter_list_hashes(f);
14 }
15}
16
17impl<T: Topological> Topological for Vec<T> {
18 fn traverse(&self, visitor: &mut impl PointVisitor) {
19 self.iter_traverse(visitor);
20 }
21}
22
23impl<T: ParseInline<I>, I: ParseInput> Parse<I> for Vec<T> {
24 fn parse(input: I) -> crate::Result<Self> {
25 input.parse_vec()
26 }
27}
28
29impl<T: Tagged> Tagged for Vec<T> {
30 const TAGS: Tags = T::TAGS;
31}
32
33impl<T: ByteOrd + InlineOutput> ByteOrd for Vec<T> {
34 fn bytes_cmp(&self, other: &Self) -> Ordering {
35 self.iter_bytes_cmp(other)
36 }
37}
38
39impl<T: InlineOutput> ToOutput for VecDeque<T> {
40 fn to_output(&self, output: &mut impl Output) {
41 let (l, r) = self.as_slices();
42 T::slice_to_output(l, output);
43 T::slice_to_output(r, output);
44 }
45}
46
47impl<T: ListHashes> ListHashes for VecDeque<T> {
48 fn list_hashes(&self, f: &mut impl FnMut(Hash)) {
49 self.iter_list_hashes(f);
50 }
51}
52
53impl<T: Topological> Topological for VecDeque<T> {
54 fn traverse(&self, visitor: &mut impl PointVisitor) {
55 self.iter_traverse(visitor);
56 }
57}
58
59impl<T: ParseInline<I>, I: ParseInput> Parse<I> for VecDeque<T> {
60 fn parse(input: I) -> crate::Result<Self> {
61 input.parse_vec().map(From::from)
62 }
63}
64
65impl<T: Tagged> Tagged for VecDeque<T> {
66 const TAGS: Tags = T::TAGS;
67}
68
69impl<T: ByteOrd + InlineOutput> ByteOrd for VecDeque<T> {
70 fn bytes_cmp(&self, other: &Self) -> Ordering {
71 self.iter_bytes_cmp(other)
72 }
73}