p4rs/externs.rs
1// Copyright 2022 Oxide Computer Company
2
3use bitvec::prelude::*;
4
5pub struct Checksum {}
6
7impl Checksum {
8 pub fn new() -> Self {
9 Self {}
10 }
11
12 pub fn run(
13 &self,
14 elements: &[&dyn crate::checksum::Checksum],
15 ) -> BitVec<u8, Msb0> {
16 let mut csum: u16 = 0;
17 for e in elements {
18 let c: u16 = e.csum().load();
19 csum += c;
20 }
21 let mut result = bitvec![u8, Msb0; 0u8, 16];
22 result.store(csum);
23 result
24 }
25}
26
27impl Default for Checksum {
28 fn default() -> Self {
29 Self::new()
30 }
31}