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