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 unsafe { Ok(ItemBuf::from_raw(bytes)) }
55 }
56}