paper_utils/sheet/
builder.rs1use smallvec::SmallVec;
9use crate::sheet::Sheet;
10
11pub struct SheetBuilder {
12 data: SmallVec<[u8; 3]>,
13}
14
15impl SheetBuilder {
16 pub fn new() -> Self {
17 SheetBuilder {
18 data: SmallVec::new(),
19 }
20 }
21
22 pub fn write_bool(mut self, value: bool) -> Self {
23 let byte = if value { b"!" } else { b"?" };
24 self.data.extend_from_slice(byte);
25 self
26 }
27
28 pub fn write_u8(mut self, value: u8) -> Self {
29 self.data.push(value);
30 self
31 }
32
33 pub fn write_u16(mut self, value: u16) -> Self {
34 self.data.extend_from_slice(&value.to_le_bytes());
35 self
36 }
37
38 pub fn write_u32(mut self, value: u32) -> Self {
39 self.data.extend_from_slice(&value.to_le_bytes());
40 self
41 }
42
43 pub fn write_u64(mut self, value: u64) -> Self {
44 self.data.extend_from_slice(&value.to_le_bytes());
45 self
46 }
47
48 pub fn write_f32(mut self, value: f32) -> Self {
49 self.data.extend_from_slice(&value.to_le_bytes());
50 self
51 }
52
53 pub fn write_f64(mut self, value: f64) -> Self {
54 self.data.extend_from_slice(&value.to_le_bytes());
55 self
56 }
57
58 pub fn write_buf(mut self, value: &[u8]) -> Self {
59 self = self.write_u32(value.len() as u32);
60 self.data.extend_from_slice(value);
61 self
62 }
63
64 pub fn write_str<T>(self, value: T) -> Self
65 where
66 T: AsRef<str>,
67 {
68 self.write_buf(value.as_ref().as_bytes())
69 }
70
71 pub fn into_sheet(self) -> Sheet {
72 Sheet::new(self.data.into_boxed_slice())
73 }
74}
75
76impl Default for SheetBuilder {
77 fn default() -> Self {
78 SheetBuilder::new()
79 }
80}