soroban_sdk::prng

Struct Prng

Source
pub struct Prng { /* private fields */ }
Expand description

Prng is a pseudo-random generator.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

Implementations§

Source§

impl Prng

Source

pub fn env(&self) -> &Env

Source

pub fn seed(&self, seed: Bytes)

Reseeds the PRNG with the provided value.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

Source

pub fn fill<T>(&self, v: &mut T)
where T: Fill + ?Sized,

Fills the type with a random value.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

§Examples
§u64
let mut value: u64 = 0;
env.prng().fill(&mut value);
assert_eq!(value, 8478755077819529274);
§[u8]
let mut value = [0u8; 32];
env.prng().fill(&mut value);
assert_eq!(
  value,
  [
    58, 248, 248, 38, 210, 150, 170, 117, 122, 110, 9, 101, 244, 57,
    221, 102, 164, 48, 43, 104, 222, 229, 242, 29, 25, 148, 88, 204,
    130, 148, 2, 66
  ],
);
Source

pub fn gen<T>(&self) -> T
where T: Gen,

Returns a random value of the given type.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

§Examples
§u64
let value: u64 = env.prng().gen();
assert_eq!(value, 8478755077819529274);
§[u8; N]
let value: [u8; 32] = env.prng().gen();
assert_eq!(
  value,
  [
    58, 248, 248, 38, 210, 150, 170, 117, 122, 110, 9, 101, 244, 57,
    221, 102, 164, 48, 43, 104, 222, 229, 242, 29, 25, 148, 88, 204,
    130, 148, 2, 66
  ],
);
Source

pub fn gen_len<T>(&self, len: T::Len) -> T
where T: GenLen,

Returns a random value of the given type with the given length.

§Panics

If the length is greater than u32::MAX.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

§Examples
§Bytes
// Get a value of length 32 bytes.
let value: Bytes = env.prng().gen_len(32);
assert_eq!(value, Bytes::from_slice(
  &env,
  &[
    58, 248, 248, 38, 210, 150, 170, 117, 122, 110, 9, 101, 244, 57,
    221, 102, 164, 48, 43, 104, 222, 229, 242, 29, 25, 148, 88, 204,
    130, 148, 2, 66
  ],
));
Source

pub fn gen_range<T>(&self, r: impl RangeBounds<T::RangeBound>) -> T
where T: GenRange,

Returns a random value of the given type in the range specified.

§Panics

If the start of the range is greater than the end.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

§Examples
§u64
// Get a value in the range of 1 to 100, inclusive.
let value: u64 = env.prng().gen_range(1..=100);
assert_eq!(value, 46);
Source

pub fn u64_in_range(&self, r: impl RangeBounds<u64>) -> u64

👎Deprecated: use env.prng().gen_range(…)

Returns a random u64 in the range specified.

§Panics

If the range is empty.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

§Examples
// Get a value in the range of 1 to 100, inclusive.
let value = env.prng().u64_in_range(1..=100);
assert_eq!(value, 46);
Source

pub fn shuffle<T>(&self, v: &mut T)
where T: Shuffle,

Shuffles a value using the Fisher-Yates algorithm.

§Warning

The PRNG is unsuitable for generating secrets or use in applications with low risk tolerance, see the module-level comment.

Auto Trait Implementations§

§

impl Freeze for Prng

§

impl !RefUnwindSafe for Prng

§

impl !Send for Prng

§

impl !Sync for Prng

§

impl Unpin for Prng

§

impl !UnwindSafe for Prng

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, C> Compare<&T> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare(&self, a: &&T, b: &&T) -> Result<Ordering, <C as Compare<&T>>::Error>

Source§

impl<T, U, E, C> Compare<(T, U)> for C
where C: Compare<T, Error = E, Error = E> + Compare<U>,

Source§

type Error = E

Source§

fn compare( &self, a: &(T, U), b: &(T, U), ) -> Result<Ordering, <C as Compare<(T, U)>>::Error>

Source§

impl<T, U, V, E, C> Compare<(T, U, V)> for C
where C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,

Source§

impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,

Source§

impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,

Source§

impl<T, C> Compare<Box<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Box<T>, b: &Box<T>, ) -> Result<Ordering, <C as Compare<Box<T>>>::Error>

Source§

impl<T, C> Compare<Option<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Option<T>, b: &Option<T>, ) -> Result<Ordering, <C as Compare<Option<T>>>::Error>

Source§

impl<T, C> Compare<Rc<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Rc<T>, b: &Rc<T>, ) -> Result<Ordering, <C as Compare<Rc<T>>>::Error>

Source§

impl<T, C> Compare<Vec<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Vec<T>, b: &Vec<T>, ) -> Result<Ordering, <C as Compare<Vec<T>>>::Error>

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<E, T, U> IntoVal<E, T> for U
where E: Env, T: FromVal<E, U>,

Source§

fn into_val(&self, e: &E) -> T

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<E, T, U> TryIntoVal<E, T> for U
where E: Env, T: TryFromVal<E, U>,

Source§

type Error = <T as TryFromVal<E, U>>::Error

Source§

fn try_into_val(&self, env: &E) -> Result<T, <U as TryIntoVal<E, T>>::Error>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V