1pub 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::*;