object_rainbow/impls/
bytes.rs

1use typenum::ToUInt;
2
3use crate::*;
4
5impl<const N: usize> ToOutput for [u8; N] {
6    fn to_output(&self, output: &mut dyn Output) {
7        output.write(self);
8    }
9}
10
11impl<const N: usize, I: ParseInput> Parse<I> for [u8; N] {
12    fn parse(input: I) -> crate::Result<Self> {
13        ParseInline::parse_as_inline(input)
14    }
15}
16
17impl<const N: usize, I: ParseInput> ParseInline<I> for [u8; N] {
18    fn parse_inline(input: &mut I) -> crate::Result<Self> {
19        input.parse_chunk().copied()
20    }
21}
22
23impl<const N: usize> Size for [u8; N]
24where
25    typenum::generic_const_mappings::Const<N>: ToUInt<Output: Unsigned>,
26{
27    const SIZE: usize = N;
28    type Size = typenum::generic_const_mappings::U<N>;
29}
30
31impl<const N: usize> MaybeHasNiche for [u8; N]
32where
33    typenum::generic_const_mappings::Const<N>: ToUInt<Output: ArrayLength>,
34{
35    type MnArray = NoNiche<ZeroNoNiche<typenum::generic_const_mappings::U<N>>>;
36}
37
38impl<const N: usize> Topological for [u8; N] {
39    fn accept_points(&self, _: &mut impl PointVisitor) {}
40}
41
42impl<const N: usize> Tagged for [u8; N] {}
43impl<const N: usize> Object for [u8; N] {}
44impl<const N: usize> Inline for [u8; N] {}
45impl<const N: usize> ReflessObject for [u8; N] {}
46impl<const N: usize> ReflessInline for [u8; N] {}
47
48impl ToOutput for Vec<u8> {
49    fn to_output(&self, output: &mut dyn Output) {
50        output.write(self);
51    }
52}
53
54impl Parse<Input<'_>> for Vec<u8> {
55    fn parse(input: Input) -> crate::Result<Self> {
56        Ok(input.parse_all().into())
57    }
58}
59
60impl Parse<ReflessInput<'_>> for Vec<u8> {
61    fn parse(input: ReflessInput) -> crate::Result<Self> {
62        Ok(input.parse_all().into())
63    }
64}
65
66impl Topological for Vec<u8> {
67    fn accept_points(&self, _: &mut impl PointVisitor) {}
68}
69
70impl Tagged for Vec<u8> {}
71impl Object for Vec<u8> {}
72impl ReflessObject for Vec<u8> {}