1use std::rc::Rc;
4
5use gwr_models::data_frame::DataFrame;
6use gwr_track::entity::Entity;
7
8pub struct FrameGen {
11 pub entity: Rc<Entity>,
12 payload_bytes: usize,
13 overhead_bytes: usize,
14 num_send_frames: usize,
15 num_sent_frames: usize,
16}
17
18impl FrameGen {
19 #[must_use]
20 pub fn new(
21 parent: &Rc<Entity>,
22 overhead_bytes: usize,
23 payload_bytes: usize,
24 num_send_frames: usize,
25 ) -> Self {
26 Self {
27 entity: Rc::new(Entity::new(parent, "frame_gen")),
28 overhead_bytes,
29 payload_bytes,
30 num_send_frames,
31 num_sent_frames: 0,
32 }
33 }
34}
35
36impl Iterator for FrameGen {
37 type Item = DataFrame;
38 fn next(&mut self) -> Option<Self::Item> {
39 if self.num_sent_frames < self.num_send_frames {
40 self.num_sent_frames += 1;
41
42 Some(DataFrame::new(
44 &self.entity,
45 self.overhead_bytes,
46 self.payload_bytes,
47 ))
48 } else {
49 None
50 }
51 }
52}