Skip to main content

object_rainbow/impls/
cid.rs

1use cid::CidGeneric;
2
3use crate::*;
4
5impl From<cid::Error> for crate::Error {
6    fn from(error: cid::Error) -> Self {
7        match error {
8            cid::Error::Io(e) => e.into(),
9            e => crate::Error::parse(e),
10        }
11    }
12}
13
14impl<const S: usize> ToOutput for CidGeneric<S> {
15    fn to_output(&self, output: &mut impl Output) {
16        self.write_bytes(output.as_write())
17            .expect("unserialisable Cid is considered a bug");
18    }
19}
20
21impl<const S: usize, I: ParseInput> Parse<I> for CidGeneric<S> {
22    fn parse(input: I) -> crate::Result<Self> {
23        Self::parse_as_inline(input)
24    }
25}
26
27impl<const S: usize, I: ParseInput> ParseInline<I> for CidGeneric<S> {
28    fn parse_inline(input: &mut I) -> crate::Result<Self> {
29        input.as_read(|r| Self::read_bytes(r))
30    }
31}
32
33/// We don't run into prefix issues because `S` is `const`.
34impl<const S: usize> InlineOutput for CidGeneric<S> {}
35
36impl<const S: usize> Tagged for CidGeneric<S> {}
37/// We can't directly interpret this as our pointers, treating [`Cid`] as just data.
38///
39/// [`Cid`]: cid::Cid
40impl<const S: usize> ListHashes for CidGeneric<S> {}
41/// We can't directly interpret this as our pointers, treating [`Cid`] as just data.
42///
43/// [`Cid`]: cid::Cid
44impl<const S: usize> Topological for CidGeneric<S> {}
45/// `varint` inside.
46impl<const S: usize> MaybeHasNiche for CidGeneric<S> {
47    type MnArray = NoNiche<NicheForUnsized>;
48}