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