aldrin_core/serializer/
bytes.rs1use crate::buf_ext::BufMutExt;
2use crate::{SerializeError, ValueKind};
3use bytes::{BufMut, BytesMut};
4
5#[derive(Debug)]
6pub struct Bytes1Serializer<'a> {
7 buf: &'a mut BytesMut,
8 num_elems: u32,
9}
10
11impl<'a> Bytes1Serializer<'a> {
12 pub(super) fn new(buf: &'a mut BytesMut, num_elems: usize) -> Result<Self, SerializeError> {
13 if num_elems <= u32::MAX as usize {
14 buf.put_discriminant_u8(ValueKind::Bytes1);
15 buf.put_varint_u32_le(num_elems as u32);
16
17 Ok(Self {
18 buf,
19 num_elems: num_elems as u32,
20 })
21 } else {
22 Err(SerializeError::Overflow)
23 }
24 }
25
26 pub fn remaining_elements(&self) -> usize {
27 self.num_elems as usize
28 }
29
30 pub fn requires_additional_elements(&self) -> bool {
31 self.num_elems > 0
32 }
33
34 pub fn serialize(&mut self, bytes: &[u8]) -> Result<&mut Self, SerializeError> {
35 if bytes.len() <= self.num_elems as usize {
36 self.num_elems -= bytes.len() as u32;
37 self.buf.put_slice(bytes);
38 Ok(self)
39 } else {
40 Err(SerializeError::TooManyElements)
41 }
42 }
43
44 pub fn finish(self) -> Result<(), SerializeError> {
45 if self.num_elems == 0 {
46 Ok(())
47 } else {
48 Err(SerializeError::TooFewElements)
49 }
50 }
51}
52
53#[derive(Debug)]
54pub struct Bytes2Serializer<'a> {
55 buf: &'a mut BytesMut,
56}
57
58impl<'a> Bytes2Serializer<'a> {
59 pub(super) fn new(buf: &'a mut BytesMut) -> Result<Self, SerializeError> {
60 buf.put_discriminant_u8(ValueKind::Bytes2);
61 Ok(Self { buf })
62 }
63
64 pub fn serialize(&mut self, bytes: &[u8]) -> Result<&mut Self, SerializeError> {
65 if !bytes.is_empty() {
66 if bytes.len() <= u32::MAX as usize {
67 self.buf.put_varint_u32_le(bytes.len() as u32);
68 self.buf.put_slice(bytes);
69 Ok(self)
70 } else {
71 Err(SerializeError::TooManyElements)
72 }
73 } else {
74 Ok(self)
75 }
76 }
77
78 pub fn finish(self) -> Result<(), SerializeError> {
79 self.buf.put_varint_u32_le(0);
80 Ok(())
81 }
82}