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 ?Sized + 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 ?Sized + 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 ?Sized + 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> MaybeHasNiche for Vec<T> {
46 type MnArray = NoNiche<NicheForUnsized>;
47}
48
49impl<T: InlineOutput> ToOutput for VecDeque<T> {
50 fn to_output(&self, output: &mut (impl ?Sized + Output)) {
51 let (l, r) = self.as_slices();
52 T::slice_to_output(l, output);
53 T::slice_to_output(r, output);
54 }
55}
56
57impl<T: ListHashes> ListHashes for VecDeque<T> {
58 fn list_hashes(&self, f: &mut (impl ?Sized + FnMut(Hash))) {
59 self.iter_list_hashes(f);
60 }
61}
62
63impl<T: Topological> Topological for VecDeque<T> {
64 fn traverse(&self, visitor: &mut (impl ?Sized + PointVisitor)) {
65 self.iter_traverse(visitor);
66 }
67}
68
69impl<T: ParseInline<I>, I: ParseInput> Parse<I> for VecDeque<T> {
70 fn parse(input: I) -> crate::Result<Self> {
71 input.parse_vec().map(From::from)
72 }
73}
74
75impl<T: Tagged> Tagged for VecDeque<T> {
76 const TAGS: Tags = T::TAGS;
77}
78
79impl<T: ByteOrd + InlineOutput> ByteOrd for VecDeque<T> {
80 fn bytes_cmp(&self, other: &Self) -> Ordering {
81 self.iter_bytes_cmp(other)
82 }
83}
84
85impl<T> PlainCollection for VecDeque<T> {}
86impl<T> VecLike for VecDeque<T> {}
87
88impl<T> Equivalent<Vec<T>> for VecDeque<T> {
89 fn into_equivalent(self) -> Vec<T> {
90 self.into()
91 }
92
93 fn from_equivalent(vec: Vec<T>) -> Self {
94 vec.into()
95 }
96}
97
98impl<T> MaybeHasNiche for VecDeque<T> {
99 type MnArray = NoNiche<NicheForUnsized>;
100}