use msgtrans::packet::Packet;
fn main() {
println!("[START] Packet serialization and deserialization test");
let test_message = "Hello, Packet World!";
let extend_data = "Extended payload for testing serialization and deserialization";
let packets = vec![
("One-way message", Packet::one_way(101, test_message)),
("Request message", Packet::request(102, extend_data)),
("Response message", Packet::response(103, "Response test")),
(
"Binary data",
Packet::one_way(105, &[0x00u8, 0x01, 0x02, 0x03, 0xFF, 0xFE][..]),
),
];
for (name, packet) in packets {
println!(
" {} - type: {:?}, ID: {}, payload: {} bytes",
name,
packet.header.packet_type,
packet.header.message_id,
packet.payload.len()
);
let serialized = packet.to_bytes();
println!(" Serialized: {} bytes", serialized.len());
match Packet::from_bytes(&serialized) {
Ok(recovered) => {
println!(
" Deserialization successful: {} bytes",
recovered.payload.len()
);
if packet == recovered {
println!(" [SUCCESS] Data consistency check passed");
} else {
println!(" [ERROR] Data consistency check failed");
}
}
Err(e) => {
println!(" [ERROR] Deserialization failed: {:?}", e);
}
}
println!();
}
println!("[INFO] Detailed serialization test");
let test_packet = Packet::one_way(999, test_message);
println!(" Original packet:");
println!(" Type: {:?}", test_packet.header.packet_type);
println!(" Message ID: {}", test_packet.header.message_id);
println!(" Payload length: {} bytes", test_packet.payload.len());
if let Some(text) = test_packet.payload_as_string() {
println!(" Payload content: \"{}\"", text);
}
let bytes = test_packet.to_bytes();
println!(" After serialization: {} bytes", bytes.len());
println!(
" First 16 bytes (header): {:02X?}",
&bytes[0..16.min(bytes.len())]
);
match Packet::from_bytes(&bytes) {
Ok(recovered_packet) => {
println!(" Deserialization:");
println!(" Type: {:?}", recovered_packet.header.packet_type);
println!(" Message ID: {}", recovered_packet.header.message_id);
println!(
" Payload length: {} bytes",
recovered_packet.payload.len()
);
if let Some(text) = recovered_packet.payload_as_string() {
println!(" Payload content: \"{}\"", text);
}
if test_packet == recovered_packet {
println!(" [SUCCESS] Integrity check passed");
} else {
println!(" [ERROR] Integrity check failed");
}
}
Err(e) => {
println!(" [ERROR] Deserialization failed: {:?}", e);
}
}
println!("[TARGET] Packet test completed");
}