Skip to main content

wry_bindgen/encode/
clamped.rs

1//! `Clamped<T>` binary protocol implementations.
2
3use alloc::vec::Vec;
4
5use crate::Clamped;
6use crate::ipc::{DecodeError, DecodedData, EncodedData};
7
8use super::{BatchableResult, BinaryDecode, BinaryEncode, EncodeTypeDef, TypeTag};
9
10// ============ Clamped<T> implementations ============
11
12impl EncodeTypeDef for Clamped<Vec<u8>> {
13    fn encode_type_def(buf: &mut Vec<u8>) {
14        buf.push(TypeTag::U8Clamped as u8);
15    }
16}
17
18impl EncodeTypeDef for Clamped<&[u8]> {
19    fn encode_type_def(buf: &mut Vec<u8>) {
20        buf.push(TypeTag::U8Clamped as u8);
21    }
22}
23
24impl EncodeTypeDef for Clamped<&mut [u8]> {
25    fn encode_type_def(buf: &mut Vec<u8>) {
26        buf.push(TypeTag::U8Clamped as u8);
27    }
28}
29
30impl BinaryEncode for Clamped<Vec<u8>> {
31    fn encode(self, encoder: &mut EncodedData) {
32        encoder.push_u32(self.0.len() as u32);
33        for val in self.0 {
34            encoder.push_u8(val);
35        }
36    }
37}
38
39impl BinaryEncode for Clamped<&[u8]> {
40    fn encode(self, encoder: &mut EncodedData) {
41        encoder.push_u32(self.0.len() as u32);
42        for &val in self.0 {
43            encoder.push_u8(val);
44        }
45    }
46}
47
48impl BinaryEncode for Clamped<&mut [u8]> {
49    fn encode(self, encoder: &mut EncodedData) {
50        encoder.push_u32(self.0.len() as u32);
51        for &mut val in self.0 {
52            encoder.push_u8(val);
53        }
54    }
55}
56
57impl BinaryDecode for Clamped<Vec<u8>> {
58    fn decode(decoder: &mut DecodedData) -> Result<Self, DecodeError> {
59        let len = decoder.take_u32()? as usize;
60        let mut vec = Vec::with_capacity(len);
61        for _ in 0..len {
62            vec.push(decoder.take_u8()?);
63        }
64        Ok(Clamped(vec))
65    }
66}
67
68impl BatchableResult for Clamped<Vec<u8>> {}