variable_len_reader/synchronous/
writer.rs

1use crate::synchronous::VariableWritable;
2
3/// AP means all-platform. This is used for usize/isize converting to u128/i128.
4/// CP means current-platform. It writes usize/isize directly.
5#[allow(unused_macros)]
6macro_rules! write_size_ap {
7    (f $feature: meta, $primitive: ty, $func: ident, $internal: ty, $write_internal: ident) => {
8        #[$feature]
9        #[cfg_attr(docsrs, doc($feature))]
10        #[inline]
11        fn $func(&mut self, value: $primitive) -> ::core::result::Result<(), Self::Error> {
12            self.$write_internal(value as $internal)
13        }
14    };
15}
16
17include!("write_bools.rs");
18
19include!("write_raw.rs");
20include!("write_raw_size.rs");
21
22include!("write_varint.rs");
23include!("write_varint_size.rs");
24include!("write_varint_long.rs");
25include!("write_varint_long_size.rs");
26
27include!("write_signed_varint.rs");
28include!("write_signed_varint_size.rs");
29include!("write_signed_varint_long.rs");
30include!("write_signed_varint_long_size.rs");
31
32include!("write_float_varint.rs");
33include!("write_float_varint_long.rs");
34
35pub trait VariableWriter: VariableWritable {
36    #[inline]
37    fn write_bool(&mut self, b: bool) -> Result<(), Self::Error> {
38        self.write_single(if b { 1 } else { 0 })
39    }
40
41    define_write_bools!();
42
43    define_write_raw!();
44    define_write_raw_size!();
45
46    define_write_varint!();
47    define_write_varint_size!();
48    define_write_varint_long!();
49    define_write_varint_long_size!();
50
51    define_write_signed_varint!();
52    define_write_signed_varint_size!();
53    define_write_signed_varint_long!();
54    define_write_signed_varint_long_size!();
55
56    define_write_float_varint!();
57    define_write_float_varint_long!();
58
59    #[cfg(feature = "sync_u8_vec")]
60    #[cfg_attr(docsrs, doc(cfg(feature = "sync_u8_vec")))]
61    #[inline]
62    fn write_u8_vec(&mut self, message: &[u8]) -> Result<(), Self::Error> {
63        self.write_usize_varint_ap(message.len())?;
64        self.write_more(message)?;
65        Ok(())
66    }
67
68    #[cfg(feature = "sync_string")]
69    #[cfg_attr(docsrs, doc(cfg(feature = "sync_string")))]
70    #[inline]
71    fn write_string(&mut self, message: &str) -> Result<(), Self::Error> {
72        self.write_u8_vec(message.as_bytes())
73    }
74}