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