| use prelude::*; |
| use rand; |
| |
| impl Uuid { |
| /// Creates a random [`Uuid`]. |
| /// |
| /// This uses the [`rand`] crate's default task RNG as the source of random |
| /// numbers. If you'd like to use a custom generator, don't use this |
| /// method: use the `rand::Rand trait`'s `rand()` method instead. |
| /// |
| /// Note that usage of this method requires the `v4` feature of this crate |
| /// to be enabled. |
| /// |
| /// # Examples |
| /// |
| /// Basic usage: |
| /// |
| /// ``` |
| /// use uuid::Uuid; |
| /// |
| /// let uuid = Uuid::new_v4(); |
| /// ``` |
| /// |
| /// [`rand`]: https://crates.io/crates/rand |
| /// [`Uuid`]: ../struct.Uuid.html |
| pub fn new_v4() -> Self { |
| use rand::RngCore; |
| |
| let mut rng = rand::thread_rng(); |
| let mut bytes = [0; 16]; |
| |
| rng.fill_bytes(&mut bytes); |
| |
| Builder::from_bytes(bytes) |
| .set_variant(Variant::RFC4122) |
| .set_version(Version::Random) |
| .build() |
| } |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use prelude::*; |
| |
| #[test] |
| fn test_new() { |
| let uuid = Uuid::new_v4(); |
| |
| assert_eq!(uuid.get_version(), Some(Version::Random)); |
| assert_eq!(uuid.get_variant(), Some(Variant::RFC4122)); |
| } |
| |
| #[test] |
| fn test_get_version() { |
| let uuid = Uuid::new_v4(); |
| |
| assert_eq!(uuid.get_version(), Some(Version::Random)); |
| assert_eq!(uuid.get_version_num(), 4) |
| } |
| } |