pub struct UniformDelayPerPacketConfig {
pub upper_bound: Option<Delay>,
pub lower_bound: Option<Delay>,
pub count: usize,
pub seed: Option<u64>,
}Expand description
The configuration struct for UniformDelayPerPacket.
See UniformDelayPerPacket for more details.
Fields§
§upper_bound: Option<Delay>§lower_bound: Option<Delay>§count: usize§seed: Option<u64>Implementations§
Source§impl UniformDelayPerPacketConfig
impl UniformDelayPerPacketConfig
Sourcepub fn upper_bound(self, upper_bound: Delay) -> Self
pub fn upper_bound(self, upper_bound: Delay) -> Self
Sets the upper bound
If the upper bound is not set, the upper bound will be 10ms.
Sourcepub fn lower_bound(self, lower_bound: Delay) -> Self
pub fn lower_bound(self, lower_bound: Delay) -> Self
Sets the lower bound
If the lower bound is not set, 0ms will be used.
Sourcepub fn count(self, count: usize) -> Self
pub fn count(self, count: usize) -> Self
Sets the number of packets to repeat
If the count is not set, it will be set to 0 (ie, infinite repeat).
Sourcepub fn seed(self, seed: u64) -> Self
pub fn seed(self, seed: u64) -> Self
Set the seed for a random generator
If the seed is not set, 42 will be used.
Sourcepub fn random_seed(self) -> Self
pub fn random_seed(self) -> Self
Allows to use a randomly generated seed
This is equivalent to: self.seed(rand::random())
Sourcepub fn build(self) -> UniformDelayPerPacket
pub fn build(self) -> UniformDelayPerPacket
Creates a new UniformDelayPerPacket corresponding to this config.
The created model will use StdRng as source of randomness (the call is equivalent to self.build_with_rng::<StdRng>()).
It should be sufficient for most cases, but StdRng is not a portable random number generator,
so one may want to use a portable random number generator like ChaCha,
to this end one can use build_with_rng.
Sourcepub fn build_with_rng<Rng: RngCore + SeedableRng>(
self,
) -> UniformDelayPerPacket<Rng>
pub fn build_with_rng<Rng: RngCore + SeedableRng>( self, ) -> UniformDelayPerPacket<Rng>
Creates a new UniformDelayPerPacket corresponding to this config.
Unlike build, this method let you choose the random generator.
§Example
let uniform_delay = UniformDelayPerPacketConfig::new()
.upper_bound(Delay::from_micros(12100))
.lower_bound(Delay::from_micros(11900))
.count(3)
.seed(42);
let mut default_build = uniform_delay.clone().build();
let mut std_build = uniform_delay.clone().build_with_rng::<StdRng>();
// ChaCha is deterministic and portable, unlike StdRng
let mut chacha_build = uniform_delay.clone().build_with_rng::<ChaCha20Rng>();
for cha in [12002810, 11982040, 11919563] {
let default = default_build.next_delay();
let std = std_build.next_delay();
let chacha = chacha_build.next_delay();
assert!(default.is_some());
assert_eq!(default, std);
assert_ne!(default, chacha);
assert_eq!(chacha, Some(Delay::from_nanos(cha)));
}
assert_eq!(default_build.next_delay(), None);
assert_eq!(std_build.next_delay(), None);
assert_eq!(chacha_build.next_delay(), None);Trait Implementations§
Source§impl Clone for UniformDelayPerPacketConfig
impl Clone for UniformDelayPerPacketConfig
Source§fn clone(&self) -> UniformDelayPerPacketConfig
fn clone(&self) -> UniformDelayPerPacketConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UniformDelayPerPacketConfig
impl Debug for UniformDelayPerPacketConfig
Source§impl Default for UniformDelayPerPacketConfig
impl Default for UniformDelayPerPacketConfig
Source§fn default() -> UniformDelayPerPacketConfig
fn default() -> UniformDelayPerPacketConfig
Source§impl DelayPerPacketTraceConfig for UniformDelayPerPacketConfig
impl DelayPerPacketTraceConfig for UniformDelayPerPacketConfig
fn into_model( self: Box<UniformDelayPerPacketConfig>, ) -> Box<dyn DelayPerPacketTrace>
Source§impl<'de> Deserialize<'de> for UniformDelayPerPacketConfigwhere
UniformDelayPerPacketConfig: Default,
impl<'de> Deserialize<'de> for UniformDelayPerPacketConfigwhere
UniformDelayPerPacketConfig: Default,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Copy for UniformDelayPerPacketConfig
impl StructuralPartialEq for UniformDelayPerPacketConfig
Auto Trait Implementations§
impl Freeze for UniformDelayPerPacketConfig
impl RefUnwindSafe for UniformDelayPerPacketConfig
impl Send for UniformDelayPerPacketConfig
impl Sync for UniformDelayPerPacketConfig
impl Unpin for UniformDelayPerPacketConfig
impl UnsafeUnpin for UniformDelayPerPacketConfig
impl UnwindSafe for UniformDelayPerPacketConfig
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.