paper_utils/sheet/
builder.rs

1/*
2 * Copyright (c) Kia Shakiba
3 *
4 * This source code is licensed under the GNU AGPLv3 license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8use 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}