enigma-packet 0.1.0

Canonical message packet format + serialization for Enigma secure messaging
Documentation
use crate::tests::{
    attachment_abort_message, attachment_ack_message, attachment_chunk_message,
    attachment_end_message, attachment_init_message, inline_file_message, text_message,
    voice_message,
};
use crate::{decode_message, encode_message, peek_packet, HEADER_LEN};

#[test]
fn roundtrip_all_message_types() {
    let messages = [
        text_message(),
        inline_file_message(),
        voice_message(),
        attachment_init_message(),
        attachment_chunk_message(0),
        attachment_end_message(),
        attachment_abort_message(),
        attachment_ack_message(),
    ];
    for message in messages {
        let encoded = encode_message(&message).unwrap();
        let decoded = decode_message(&encoded).unwrap();
        assert_eq!(decoded, message);
    }
}

#[test]
fn frame_body_length_matches_payload() {
    let message = text_message();
    let encoded = encode_message(&message).unwrap();
    let view = peek_packet(&encoded).unwrap();
    assert_eq!(view.body_len as usize, encoded.len() - HEADER_LEN);
}

#[test]
fn encoding_is_deterministic() {
    let message = attachment_chunk_message(1);
    let first = encode_message(&message).unwrap();
    let second = encode_message(&message).unwrap();
    assert_eq!(first, second);
}