pub fn decode_bundle<'a>(bytes: &'a [u8]) -> Result<(Bundle<'a>, usize)>Expand description
Decode a bundle that can contain messages and nested bundles. Returns the bundle and number of bytes consumed.
Examples found in repository?
examples/recv_udp.rs (line 37)
22fn main() -> std::io::Result<()> {
23 let sock = UdpSocket::bind("0.0.0.0:9000")?;
24 println!("listening on 9000");
25 let mut buf = [0u8; 65536];
26 loop {
27 let (n, _src) = sock.recv_from(&mut buf)?;
28 let data = &buf[..n];
29 // very simple heuristic: leading byte '/' => message, '#' => bundle
30 match data.first().copied() {
31 Some(b'/') => {
32 let (msg, used) = decode_message(data).expect("decode message");
33 assert_eq!(used, data.len());
34 println!("msg {} args={}", msg.address, msg.args.len());
35 }
36 Some(b'#') => {
37 let (bundle, _used) = decode_bundle(data).expect("decode bundle");
38 let (total_messages, total_bundles) = count_items_in_bundle(&bundle);
39 println!(
40 "bundle timetag={} direct_packets={} total_messages={} total_bundles={}",
41 bundle.timetag,
42 bundle.packets.len(),
43 total_messages,
44 total_bundles
45 );
46 }
47 _ => eprintln!("unknown packet"),
48 }
49 }
50}