Struct netem_trace::model::delay::RepeatedDelayPattern
source · pub struct RepeatedDelayPattern {
pub pattern: VecDeque<Box<dyn DelayTrace>>,
}Expand description
The model contains an array of delay trace models.
Combines multiple delay trace models into one delay pattern,
and repeat the pattern for count times.
Examples
The most common use case is to read from a configuration file and
deserialize it into a RepeatedDelayPatternConfig:
let config_file_content = "{\"RepeatedDelayPatternConfig\":{\"pattern\":[{\"StaticDelayConfig\":{\"delay\":{\"secs\":0,\"nanos\":10000000},\"duration\":{\"secs\":1,\"nanos\":0}}},{\"StaticDelayConfig\":{\"delay\":{\"secs\":0,\"nanos\":20000000},\"duration\":{\"secs\":1,\"nanos\":0}}}],\"count\":2}}";
// The content would be "{\"RepeatedDelayPatternConfig\":{\"pattern\":[{\"StaticDelayConfig\":{\"delay\":\"10ms\",\"duration\":\"1s\"}},{\"StaticDelayConfig\":{\"delay\":\"20ms\",\"duration\":\"1s\"}}],\"count\":2}}"
// if the `human` feature is enabled.
let des: Box<dyn DelayTraceConfig> = serde_json::from_str(config_file_content).unwrap();
let mut model = des.into_model();
assert_eq!(
model.next_delay(),
Some((Delay::from_millis(10), Duration::from_secs(1)))
);
assert_eq!(
model.next_delay(),
Some((Delay::from_millis(20), Duration::from_secs(1)))
);
assert_eq!(
model.next_delay(),
Some((Delay::from_millis(10), Duration::from_secs(1)))
);
assert_eq!(
model.next_delay(),
Some((Delay::from_millis(20), Duration::from_secs(1)))
);
assert_eq!(model.next_delay(), None);You can also build manually:
let pat = vec![
Box::new(
StaticDelayConfig::new()
.delay(Delay::from_millis(10))
.duration(Duration::from_secs(1)),
) as Box<dyn DelayTraceConfig>,
Box::new(
StaticDelayConfig::new()
.delay(Delay::from_millis(20))
.duration(Duration::from_secs(1)),
) as Box<dyn DelayTraceConfig>,
];
let ser = Box::new(RepeatedDelayPatternConfig::new().pattern(pat).count(2)) as Box<dyn DelayTraceConfig>;
let ser_str = serde_json::to_string(&ser).unwrap();
let json_str = "{\"RepeatedDelayPatternConfig\":{\"pattern\":[{\"StaticDelayConfig\":{\"delay\":{\"secs\":0,\"nanos\":10000000},\"duration\":{\"secs\":1,\"nanos\":0}}},{\"StaticDelayConfig\":{\"delay\":{\"secs\":0,\"nanos\":20000000},\"duration\":{\"secs\":1,\"nanos\":0}}}],\"count\":2}}";
// The json string would be "{\"RepeatedDelayPatternConfig\":{\"pattern\":[{\"StaticDelayConfig\":{\"delay\":\"10ms\",\"duration\":\"1s\"}},{\"StaticDelayConfig\":{\"delay\":\"20ms\",\"duration\":\"1s\"}}],\"count\":2}}"
// if the `human` feature is enabled.
assert_eq!(ser_str, json_str);Fields§
§pattern: VecDeque<Box<dyn DelayTrace>>Trait Implementations§
source§impl DelayTrace for RepeatedDelayPattern
impl DelayTrace for RepeatedDelayPattern
Auto Trait Implementations§
impl !RefUnwindSafe for RepeatedDelayPattern
impl !Send for RepeatedDelayPattern
impl !Sync for RepeatedDelayPattern
impl Unpin for RepeatedDelayPattern
impl !UnwindSafe for RepeatedDelayPattern
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more