| use md5; |
| use prelude::*; |
| |
| impl Uuid { |
| /// Creates a [`Uuid`] using a name from a namespace, based on the MD5 |
| /// hash. |
| /// |
| /// A number of namespaces are available as constants in this crate: |
| /// |
| /// * [`NAMESPACE_DNS`] |
| /// * [`NAMESPACE_OID`] |
| /// * [`NAMESPACE_URL`] |
| /// * [`NAMESPACE_X500`] |
| /// |
| /// Note that usage of this method requires the `v3` feature of this crate |
| /// to be enabled. |
| /// |
| /// [`NAMESPACE_DNS`]: ../ns/const.NAMESPACE_DNS.html |
| /// [`NAMESPACE_OID`]: ../ns/const.NAMESPACE_OID.html |
| /// [`NAMESPACE_URL`]: ../ns/const.NAMESPACE_URL.html |
| /// [`NAMESPACE_X500`]: ../ns/const.NAMESPACE_X500.html |
| /// [`Uuid`]: ../struct.Uuid.html |
| pub fn new_v3(namespace: &Uuid, name: &[u8]) -> Uuid { |
| let mut context = md5::Context::new(); |
| |
| context.consume(namespace.as_bytes()); |
| context.consume(name); |
| |
| let mut uuid = Uuid::from_bytes(context.compute().into()); |
| |
| uuid.set_variant(Variant::RFC4122); |
| uuid.set_version(Version::Md5); |
| uuid |
| } |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use prelude::*; |
| |
| static FIXTURE: &'static [(&'static Uuid, &'static str, &'static str)] = &[ |
| ( |
| &Uuid::NAMESPACE_DNS, |
| "example.org", |
| "04738bdf-b25a-3829-a801-b21a1d25095b", |
| ), |
| ( |
| &Uuid::NAMESPACE_DNS, |
| "rust-lang.org", |
| "c6db027c-615c-3b4d-959e-1a917747ca5a", |
| ), |
| ( |
| &Uuid::NAMESPACE_DNS, |
| "42", |
| "5aab6e0c-b7d3-379c-92e3-2bfbb5572511", |
| ), |
| ( |
| &Uuid::NAMESPACE_DNS, |
| "lorem ipsum", |
| "4f8772e9-b59c-3cc9-91a9-5c823df27281", |
| ), |
| ( |
| &Uuid::NAMESPACE_URL, |
| "example.org", |
| "39682ca1-9168-3da2-a1bb-f4dbcde99bf9", |
| ), |
| ( |
| &Uuid::NAMESPACE_URL, |
| "rust-lang.org", |
| "7ed45aaf-e75b-3130-8e33-ee4d9253b19f", |
| ), |
| ( |
| &Uuid::NAMESPACE_URL, |
| "42", |
| "08998a0c-fcf4-34a9-b444-f2bfc15731dc", |
| ), |
| ( |
| &Uuid::NAMESPACE_URL, |
| "lorem ipsum", |
| "e55ad2e6-fb89-34e8-b012-c5dde3cd67f0", |
| ), |
| ( |
| &Uuid::NAMESPACE_OID, |
| "example.org", |
| "f14eec63-2812-3110-ad06-1625e5a4a5b2", |
| ), |
| ( |
| &Uuid::NAMESPACE_OID, |
| "rust-lang.org", |
| "6506a0ec-4d79-3e18-8c2b-f2b6b34f2b6d", |
| ), |
| ( |
| &Uuid::NAMESPACE_OID, |
| "42", |
| "ce6925a5-2cd7-327b-ab1c-4b375ac044e4", |
| ), |
| ( |
| &Uuid::NAMESPACE_OID, |
| "lorem ipsum", |
| "5dd8654f-76ba-3d47-bc2e-4d6d3a78cb09", |
| ), |
| ( |
| &Uuid::NAMESPACE_X500, |
| "example.org", |
| "64606f3f-bd63-363e-b946-fca13611b6f7", |
| ), |
| ( |
| &Uuid::NAMESPACE_X500, |
| "rust-lang.org", |
| "bcee7a9c-52f1-30c6-a3cc-8c72ba634990", |
| ), |
| ( |
| &Uuid::NAMESPACE_X500, |
| "42", |
| "c1073fa2-d4a6-3104-b21d-7a6bdcf39a23", |
| ), |
| ( |
| &Uuid::NAMESPACE_X500, |
| "lorem ipsum", |
| "02f09a3f-1624-3b1d-8409-44eff7708208", |
| ), |
| ]; |
| |
| #[test] |
| fn test_new() { |
| for &(ref ns, ref name, _) in FIXTURE { |
| let uuid = Uuid::new_v3(*ns, name.as_bytes()); |
| assert_eq!(uuid.get_version().unwrap(), Version::Md5); |
| assert_eq!(uuid.get_variant().unwrap(), Variant::RFC4122); |
| } |
| } |
| |
| #[test] |
| fn test_to_hyphenated_string() { |
| for &(ref ns, ref name, ref expected) in FIXTURE { |
| let uuid = Uuid::new_v3(*ns, name.as_bytes()); |
| assert_eq!(uuid.to_hyphenated().to_string(), *expected); |
| } |
| } |
| } |