SEDSnet 4.2.2

A memory safe, no_std-capable networking stack with routing, discovery, reliability, and Rust/C/Python bindings.
Documentation
use crate::config::{DataEndpoint, DataType};
use crate::packet::Packet;
use crate::wire_format;
use std::sync::Arc;

const FLAG_COMPRESSED_PAYLOAD: u8 = 0x01;

fn make_message_packet(payload: &[u8], ts: u64) -> Packet {
    Packet::new(
        DataType::named("MESSAGE_DATA"),
        &[DataEndpoint::named("SD_CARD")],
        "CMP_NODE",
        ts,
        Arc::<[u8]>::from(payload),
    )
    .expect("packet build failed")
}

#[test]
fn compressible_payload_sets_compressed_flag_and_roundtrips() {
    let payload = vec![0u8; 4096];
    let pkt = make_message_packet(&payload, 11);

    let wire = wire_format::pack_packet(&pkt);
    assert_eq!(wire[0] & FLAG_COMPRESSED_PAYLOAD, FLAG_COMPRESSED_PAYLOAD);

    let decoded = wire_format::unpack_packet(&wire).expect("unpack failed");
    assert_eq!(decoded.payload(), payload.as_slice());
}

#[test]
fn below_threshold_payload_stays_uncompressed_and_roundtrips() {
    let payload = b"small-msg".to_vec();
    let pkt = make_message_packet(&payload, 22);

    let wire = wire_format::pack_packet(&pkt);
    assert_eq!(wire[0] & FLAG_COMPRESSED_PAYLOAD, 0);

    let decoded = wire_format::unpack_packet(&wire).expect("unpack failed");
    assert_eq!(decoded.payload(), payload.as_slice());
}

#[test]
fn mixed_payload_workload_roundtrips_without_failures() {
    for i in 0..1500u64 {
        let payload = if i % 2 == 0 {
            vec![b'Z'; 192]
        } else {
            let mut v = Vec::with_capacity(192);
            for j in 0..192u16 {
                v.push(32u8 + (((i as u16 + j) as u8) % 95));
            }
            v
        };

        let pkt = make_message_packet(&payload, i);
        let wire = wire_format::pack_packet(&pkt);
        let decoded = wire_format::unpack_packet(&wire).expect("unpack failed");
        assert_eq!(decoded.payload(), payload.as_slice());
    }
}