edgefirst_schemas/
service.rs1#[derive(PartialEq, Clone, Copy, Debug)]
8pub struct ServiceHeader {
9 pub guid: i64,
10 pub seq: u64,
11}
12
13use crate::cdr::{CdrCursor, CdrError, CdrFixed, CdrSizer, CdrWriter};
14
15impl CdrFixed for ServiceHeader {
16 const CDR_SIZE: usize = 16; fn read_cdr(cursor: &mut CdrCursor<'_>) -> Result<Self, CdrError> {
18 Ok(ServiceHeader {
19 guid: cursor.read_i64()?,
20 seq: cursor.read_u64()?,
21 })
22 }
23 fn write_cdr(&self, writer: &mut CdrWriter<'_>) {
24 writer.write_i64(self.guid);
25 writer.write_u64(self.seq);
26 }
27 fn size_cdr(sizer: &mut CdrSizer) {
28 sizer.size_i64();
29 sizer.size_u64();
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36 use crate::cdr::{decode_fixed, encode_fixed};
37
38 #[test]
39 fn service_header_roundtrip() {
40 let cases = [
41 (0, 0, "zero"),
42 (12345678901234567i64, 1, "typical"),
43 (i64::MAX, u64::MAX, "max values"),
44 (i64::MIN, 0, "min guid"),
45 (-1, 999999, "negative guid"),
46 ];
47 for (guid, seq, name) in cases {
48 let header = ServiceHeader { guid, seq };
49 let bytes = encode_fixed(&header).unwrap();
50 let decoded: ServiceHeader = decode_fixed(&bytes).unwrap();
51 assert_eq!(header, decoded, "failed for case: {}", name);
52 }
53 }
54}