valence_protocol/impls/
pointer.rs
1use std::borrow::Cow;
2use std::io::Write;
3use std::rc::Rc;
4use std::sync::Arc;
5
6use crate::{Decode, Encode};
7
8impl<T: Encode + ?Sized> Encode for &T {
9 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
10 (**self).encode(w)
11 }
12}
13
14impl<T: Encode + ?Sized> Encode for &mut T {
15 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
16 (**self).encode(w)
17 }
18}
19
20impl<T: Encode + ?Sized> Encode for Box<T> {
21 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
22 self.as_ref().encode(w)
23 }
24}
25
26impl<'a, T: Decode<'a>> Decode<'a> for Box<T> {
27 fn decode(r: &mut &'a [u8]) -> anyhow::Result<Self> {
28 T::decode(r).map(Box::new)
29 }
30}
31
32impl<T: Encode + ?Sized> Encode for Rc<T> {
33 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
34 self.as_ref().encode(w)
35 }
36}
37
38impl<'a, T: Decode<'a>> Decode<'a> for Rc<T> {
39 fn decode(r: &mut &'a [u8]) -> anyhow::Result<Self> {
40 T::decode(r).map(Rc::new)
41 }
42}
43
44impl<T: Encode + ?Sized> Encode for Arc<T> {
45 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
46 self.as_ref().encode(w)
47 }
48}
49
50impl<'a, T: Decode<'a>> Decode<'a> for Arc<T> {
51 fn decode(r: &mut &'a [u8]) -> anyhow::Result<Self> {
52 T::decode(r).map(Arc::new)
53 }
54}
55
56impl<B> Encode for Cow<'_, B>
57where
58 B: ToOwned + Encode + ?Sized,
59{
60 fn encode(&self, w: impl Write) -> anyhow::Result<()> {
61 self.as_ref().encode(w)
62 }
63}
64
65impl<'a, B> Decode<'a> for Cow<'_, B>
66where
67 B: ToOwned + ?Sized,
68 B::Owned: Decode<'a>,
69{
70 fn decode(r: &mut &'a [u8]) -> anyhow::Result<Self> {
71 B::Owned::decode(r).map(Cow::Owned)
72 }
73}