stream_io/standard/writer/
mod.rs

1use super::*;
2use std::collections::VecDeque;
3
4use concat_idents::concat_idents;
5
6#[allow(unused_variables)]
7impl StreamWriter for u8 {
8    fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> {
9        buffer.write_u8(*self)
10    }
11}
12#[allow(unused_variables)]
13impl StreamWriter for i8 {
14    fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> {
15        buffer.write_i8(*self)
16    }
17}
18
19macro_rules! w_number {
20    ($($t:ty),*) => {
21        $(
22            impl StreamWriter for $t {
23                fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> {
24                    concat_idents!(write_fn = write_, $t {
25                        match order {
26                            ByteOrder::BigEndian => buffer.write_fn::<BigEndian>(*self),
27                            ByteOrder::LittleEndian => buffer.write_fn::<LittleEndian>(*self),
28                        }
29                    })
30                }
31            }
32        )*
33    };
34}
35
36w_number![u16, u32, u64, u128];
37w_number![i16, i32, i64, i128];
38w_number![f32, f64];
39
40macro_rules! w_vector {
41    ($($t:ty),*) => {
42        $(
43            impl<T> StreamWriter for $t
44            where
45                T: StreamWriter
46            {
47                fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> {
48                    (self.len() as u32).write_to(buffer, order)?;
49                    for item in self {
50                        item.write_to(buffer, order)?;
51                    }
52                    Ok(())
53                }
54            }
55        )*
56    };
57}
58
59w_vector![Vec<T>, VecDeque<T>];