1use std::io::Write;
2
3use crate::{BinaryError, Node, NodeRef, Result, decoder::Decoder, encoder::Encoder};
4
5pub fn unmarshal_ref(data: &[u8]) -> Result<NodeRef<'_>> {
6 let mut decoder = Decoder::new(data);
7 let node = decoder.read_node_ref()?;
8
9 if decoder.is_finished() {
10 Ok(node)
11 } else {
12 Err(BinaryError::LeftoverData(decoder.bytes_left()))
13 }
14}
15
16pub fn marshal_to(node: &Node, writer: &mut impl Write) -> Result<()> {
17 writer.write_all(&[0])?;
18 let mut encoder = Encoder::new(writer);
19 encoder.write_node(node)?;
20 Ok(())
21}
22
23pub fn marshal(node: &Node) -> Result<Vec<u8>> {
24 let mut payload = Vec::with_capacity(1024);
25 marshal_to(node, &mut payload)?;
26 Ok(payload)
27}