Skip to content

Commit 17d68ea

Browse files
authored
feat(model): add traits to delay-per-packet config (#23)
1 parent 1cbd85c commit 17d68ea

1 file changed

Lines changed: 15 additions & 8 deletions

File tree

src/model/delay_per_packet.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const DEFAULT_RNG_SEED: u64 = 42; // Some documentation will need corrections if
6767
/// separate the configuration part into a simple struct for serialization/deserialization, and
6868
/// construct the model from the configuration.
6969
#[cfg_attr(feature = "serde", typetag::serde)]
70-
pub trait DelayPerPacketTraceConfig: DynClone + Send {
70+
pub trait DelayPerPacketTraceConfig: DynClone + Send + std::fmt::Debug {
7171
fn into_model(self: Box<Self>) -> Box<dyn DelayPerPacketTrace>;
7272
}
7373

@@ -100,7 +100,7 @@ use super::solve_truncate::solve;
100100
/// assert_eq!(static_delay.next_delay(), Some(Delay::from_millis(10)));
101101
/// assert_eq!(static_delay.next_delay(), None);
102102
/// ```
103-
#[derive(Debug, Clone)]
103+
#[derive(Default, Debug, Clone, Copy, PartialEq)]
104104
pub struct StaticDelayPerPacket {
105105
pub delay: Delay,
106106
pub count: usize,
@@ -111,7 +111,7 @@ pub struct StaticDelayPerPacket {
111111
///
112112
/// See [`StaticDelayPerPacket`] for more details.
113113
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(default))]
114-
#[derive(Debug, Clone, Default)]
114+
#[derive(Default, Debug, Clone, Copy, PartialEq)]
115115
pub struct StaticDelayPerPacketConfig {
116116
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
117117
#[cfg_attr(
@@ -191,6 +191,7 @@ pub struct StaticDelayPerPacketConfig {
191191
/// let json_str = "{\"RepeatedDelayPerPacketPatternConfig\":{\"pattern\":[{\"StaticDelayPerPacketConfig\":{\"delay\":{\"secs\":0,\"nanos\":10000000},\"count\":1}},{\"StaticDelayPerPacketConfig\":{\"delay\":{\"secs\":0,\"nanos\":20000000},\"count\":1}}],\"count\":2}}";
192192
/// assert_eq!(ser_str, json_str);
193193
/// ```
194+
#[derive(Default)]
194195
pub struct RepeatedDelayPerPacketPattern {
195196
pub pattern: Vec<Box<dyn DelayPerPacketTraceConfig>>,
196197
pub count: usize,
@@ -203,7 +204,7 @@ pub struct RepeatedDelayPerPacketPattern {
203204
///
204205
/// See [`RepeatedDelayPerPacketPattern`] for more details.
205206
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(default))]
206-
#[derive(Default, Clone)]
207+
#[derive(Default, Debug, Clone)]
207208
pub struct RepeatedDelayPerPacketPatternConfig {
208209
pub pattern: Vec<Box<dyn DelayPerPacketTraceConfig>>,
209210
pub count: usize,
@@ -250,7 +251,7 @@ pub struct RepeatedDelayPerPacketPatternConfig {
250251
/// assert_eq!(normal_delay.next_delay(), Some(Delay::from_nanos(12100000)));
251252
/// assert_eq!(normal_delay.next_delay(), None);
252253
/// ```
253-
#[derive(Debug, Clone)]
254+
#[derive(Debug, Clone, Copy, PartialEq)]
254255
pub struct NormalizedDelayPerPacket<Rng = StdRng>
255256
where
256257
Rng: RngCore,
@@ -270,7 +271,7 @@ where
270271
///
271272
/// See [`NormalizedDelayPerPacket`] for more details.
272273
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(default))]
273-
#[derive(Debug, Clone, Default)]
274+
#[derive(Default, Debug, Clone, Copy, PartialEq)]
274275
pub struct NormalizedDelayPerPacketConfig {
275276
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
276277
#[cfg_attr(
@@ -344,7 +345,7 @@ pub struct NormalizedDelayPerPacketConfig {
344345
/// assert_eq!(log_normal_delay.next_delay(), Some(Delay::from_nanos(12100000)));
345346
/// assert_eq!(log_normal_delay.next_delay(), None);
346347
/// ```
347-
#[derive(Debug, Clone)]
348+
#[derive(Debug, Clone, Copy, PartialEq)]
348349
pub struct LogNormalizedDelayPerPacket<Rng = StdRng>
349350
where
350351
Rng: RngCore,
@@ -364,7 +365,7 @@ where
364365
///
365366
/// See [`LogNormalizedDelayPerPacket`] for more details.
366367
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(default))]
367-
#[derive(Debug, Clone, Default)]
368+
#[derive(Default, Debug, Clone, Copy, PartialEq)]
368369
pub struct LogNormalizedDelayPerPacketConfig {
369370
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
370371
#[cfg_attr(
@@ -901,6 +902,12 @@ impl_delay_per_packet_trace_config!(NormalizedDelayPerPacketConfig);
901902
impl_delay_per_packet_trace_config!(LogNormalizedDelayPerPacketConfig);
902903
impl_delay_per_packet_trace_config!(RepeatedDelayPerPacketPatternConfig);
903904

905+
impl<Model: DelayPerPacketTrace + 'static> From<Model> for Box<dyn DelayPerPacketTrace> {
906+
fn from(model: Model) -> Self {
907+
Box::new(model)
908+
}
909+
}
910+
904911
/// Turn a [`DelayPerPacketTraceConfig`] into a forever repeated [`RepeatedDelayPerPacketPatternConfig`].
905912
pub trait Forever: DelayPerPacketTraceConfig {
906913
fn forever(self) -> RepeatedDelayPerPacketPatternConfig;

0 commit comments

Comments
 (0)