der/
encode_ref.rs
1use crate::{Encode, EncodeValue, Length, Result, Tag, Tagged, ValueOrd, Writer};
5use core::cmp::Ordering;
6
7pub struct EncodeRef<'a, T>(pub &'a T);
10
11impl<'a, T> AsRef<T> for EncodeRef<'a, T> {
12 fn as_ref(&self) -> &T {
13 self.0
14 }
15}
16
17impl<'a, T> Encode for EncodeRef<'a, T>
18where
19 T: Encode,
20{
21 fn encoded_len(&self) -> Result<Length> {
22 self.0.encoded_len()
23 }
24
25 fn encode(&self, writer: &mut impl Writer) -> Result<()> {
26 self.0.encode(writer)
27 }
28}
29
30pub struct EncodeValueRef<'a, T>(pub &'a T);
35
36impl<'a, T> AsRef<T> for EncodeValueRef<'a, T> {
37 fn as_ref(&self) -> &T {
38 self.0
39 }
40}
41
42impl<'a, T> EncodeValue for EncodeValueRef<'a, T>
43where
44 T: EncodeValue,
45{
46 fn value_len(&self) -> Result<Length> {
47 self.0.value_len()
48 }
49
50 fn encode_value(&self, writer: &mut impl Writer) -> Result<()> {
51 self.0.encode_value(writer)
52 }
53}
54
55impl<'a, T> Tagged for EncodeValueRef<'a, T>
56where
57 T: Tagged,
58{
59 fn tag(&self) -> Tag {
60 self.0.tag()
61 }
62}
63
64impl<'a, T> ValueOrd for EncodeValueRef<'a, T>
65where
66 T: ValueOrd,
67{
68 fn value_cmp(&self, other: &Self) -> Result<Ordering> {
69 self.0.value_cmp(other.0)
70 }
71}