wacore_binary/
marshal.rs

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}