Skip to main content

object_rainbow/impls/
generic_array.rs

1use std::ops::Mul;
2
3use crate::*;
4
5impl<T: InlineOutput, N: ArrayLength> ToOutput for GenericArray<T, N> {
6    fn to_output(&self, output: &mut dyn Output) {
7        T::slice_to_output(self, output);
8    }
9}
10
11impl<T: InlineOutput, N: ArrayLength> InlineOutput for GenericArray<T, N> {}
12
13impl<T: ListHashes, N: ArrayLength> ListHashes for GenericArray<T, N> {
14    fn list_hashes(&self, f: &mut impl FnMut(Hash)) {
15        self.iter_list_hashes(f);
16    }
17}
18
19impl<T: Topological, N: ArrayLength> Topological for GenericArray<T, N> {
20    fn traverse(&self, visitor: &mut impl PointVisitor) {
21        self.iter_traverse(visitor);
22    }
23}
24
25impl<T: Tagged, N: ArrayLength> Tagged for GenericArray<T, N> {
26    const TAGS: Tags = T::TAGS;
27}
28
29impl<T: Size, N: ArrayLength> Size for GenericArray<T, N>
30where
31    N: Mul<T::Size, Output: Unsigned>,
32{
33    type Size = <N as Mul<T::Size>>::Output;
34}
35
36impl<T: ParseInline<I>, N: ArrayLength, I: ParseInput> Parse<I> for GenericArray<T, N> {
37    fn parse(input: I) -> crate::Result<Self> {
38        Self::parse_as_inline(input)
39    }
40}
41
42impl<T: ParseInline<I>, N: ArrayLength, I: ParseInput> ParseInline<I> for GenericArray<T, N> {
43    fn parse_inline(input: &mut I) -> crate::Result<Self> {
44        input.parse_generic_array()
45    }
46}