Skip to main content

paper_utils/sheet/
mod.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
8pub mod builder;
9
10use std::io::Write;
11
12#[cfg(feature = "tokio")]
13use tokio::io::AsyncWrite;
14
15#[cfg(feature = "tokio")]
16use crate::stream::write_buf_async;
17use crate::stream::{Buffer, StreamError, write_buf};
18
19pub struct Sheet {
20	data: Buffer,
21}
22
23impl Sheet {
24	pub fn new(data: Buffer) -> Self {
25		Sheet {
26			data,
27		}
28	}
29
30	pub fn serialize(&self) -> &[u8] {
31		&self.data
32	}
33
34	pub fn data(&self) -> &Buffer {
35		&self.data
36	}
37
38	pub fn write(&self, writer: &mut impl Write) -> Result<(), StreamError> {
39		match write_buf(writer, &self.data) {
40			Ok(_) => Ok(()),
41			Err(_) => Err(StreamError::InvalidStream),
42		}
43	}
44
45	#[cfg(feature = "tokio")]
46	pub async fn write_async<W>(&self, writer: &mut W) -> Result<(), StreamError>
47	where
48		W: AsyncWrite + Unpin,
49	{
50		match write_buf_async(writer, &self.data).await {
51			Ok(_) => Ok(()),
52			Err(_) => Err(StreamError::InvalidStream),
53		}
54	}
55}
56
57pub use crate::sheet::builder::*;