rust_mqtt/utils/
rng_generator.rs

1// This code is handed from Embedded Rust documentation and
2// is accessible from https://docs.rust-embedded.org/cortex-m-rt/0.6.0/rand/trait.RngCore.html
3
4use rand_core::{impls, Error, RngCore};
5
6pub struct CountingRng(pub u64);
7
8impl RngCore for CountingRng {
9    fn next_u32(&mut self) -> u32 {
10        self.next_u64() as u32
11    }
12
13    fn next_u64(&mut self) -> u64 {
14        self.0 += 1;
15        if self.0 > u16::MAX as u64 {
16            self.0 = 1;
17        }
18        self.0
19    }
20
21    fn fill_bytes(&mut self, dest: &mut [u8]) {
22        impls::fill_bytes_via_next(self, dest)
23    }
24
25    fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
26        self.fill_bytes(dest);
27        Ok(())
28    }
29}