rune_core/item/
musli.rs

1use musli::{Allocator, Decode, Decoder, Encode, Encoder};
2
3use crate::alloc::Vec;
4use crate::item::{Item, ItemBuf};
5
6impl<M> Encode<M> for Item {
7    type Encode = [u8];
8
9    #[inline]
10    fn encode<E>(&self, encoder: E) -> Result<(), E::Error>
11    where
12        E: Encoder<Mode = M>,
13    {
14        self.as_bytes().encode(encoder)
15    }
16
17    #[inline]
18    fn as_encode(&self) -> &Self::Encode {
19        self.as_bytes()
20    }
21}
22
23impl<M> Encode<M> for ItemBuf {
24    type Encode = [u8];
25
26    #[inline]
27    fn encode<E>(&self, encoder: E) -> Result<(), E::Error>
28    where
29        E: Encoder<Mode = M>,
30    {
31        self.as_bytes().encode(encoder)
32    }
33
34    #[inline]
35    fn as_encode(&self) -> &Self::Encode {
36        self.as_bytes()
37    }
38}
39
40impl<'de, M, A> Decode<'de, M, A> for ItemBuf
41where
42    A: Allocator,
43{
44    const IS_BITWISE_DECODE: bool = false;
45
46    #[inline]
47    fn decode<D>(decoder: D) -> Result<ItemBuf, D::Error>
48    where
49        D: Decoder<'de>,
50    {
51        let bytes = Vec::<u8>::decode(decoder)?;
52
53        // TODO: validate byte sequence.
54        unsafe { Ok(ItemBuf::from_raw(bytes)) }
55    }
56}