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 let mut encoder = Encoder::new(writer)?;
18 encoder.write_node(node)?;
19 Ok(())
20}
21
22pub fn marshal(node: &Node) -> Result<Vec<u8>> {
23 let mut payload = Vec::with_capacity(1024);
24 marshal_to(node, &mut payload)?;
25 Ok(payload)
26}
27
28pub fn marshal_ref_to(node: &NodeRef<'_>, writer: &mut impl Write) -> Result<()> {
31 let mut encoder = Encoder::new(writer)?;
32 encoder.write_node_ref(node)?;
33 Ok(())
34}
35
36pub fn marshal_ref(node: &NodeRef<'_>) -> Result<Vec<u8>> {
39 let mut payload = Vec::with_capacity(1024);
40 marshal_ref_to(node, &mut payload)?;
41 Ok(payload)
42}