#![no_std] #[macro_use] extern crate alloc; use alloc::vec::Vec; use cryptography::hashing::checksum; use process::PID; use versioning::Version; pub const VERSION: Version = Version::new(0, 1, 0); #[repr(C)] pub struct Message { src: PID, // bytes 0-3 dest: PID, // bytes 4-7 version: Version, // bytes 8-10 checksum: u64, // bytes 11-19 length: usize, // bytes 20-23 timestamp: u64, // bytes 24-31 body: Vec, } impl Message { pub fn set_checksum(&mut self) { self.checksum = self.compute_body_checksum() } fn compute_body_checksum(&mut self) -> u64 { checksum(&self.body) } } #[test] fn test_checksum() { let mut message = Message { src: 123, dest: 456, version: Version::new(0, 1, 0), checksum: 0, timestamp: 0, length: 5, body: vec![1, 2], }; message.set_checksum(); assert_eq!(message.checksum, 3); assert_ne!(message.checksum, 1) }