Skip to main content

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;
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}