1use crate::Uuid;
2
3impl Uuid {
4 pub fn new_v5(namespace: &Uuid, name: &[u8]) -> Uuid {
37 crate::Builder::from_sha1_bytes(crate::sha1::hash(namespace.as_bytes(), name)).into_uuid()
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[cfg(all(
46 target_arch = "wasm32",
47 target_vendor = "unknown",
48 target_os = "unknown"
49 ))]
50 use wasm_bindgen_test::*;
51
52 use crate::{std::string::ToString, Variant, Version};
53
54 static FIXTURE: &'static [(&'static Uuid, &'static str, &'static str)] = &[
55 (
56 &Uuid::NAMESPACE_DNS,
57 "example.org",
58 "aad03681-8b63-5304-89e0-8ca8f49461b5",
59 ),
60 (
61 &Uuid::NAMESPACE_DNS,
62 "rust-lang.org",
63 "c66bbb60-d62e-5f17-a399-3a0bd237c503",
64 ),
65 (
66 &Uuid::NAMESPACE_DNS,
67 "42",
68 "7c411b5e-9d3f-50b5-9c28-62096e41c4ed",
69 ),
70 (
71 &Uuid::NAMESPACE_DNS,
72 "lorem ipsum",
73 "97886a05-8a68-5743-ad55-56ab2d61cf7b",
74 ),
75 (
76 &Uuid::NAMESPACE_URL,
77 "example.org",
78 "54a35416-963c-5dd6-a1e2-5ab7bb5bafc7",
79 ),
80 (
81 &Uuid::NAMESPACE_URL,
82 "rust-lang.org",
83 "c48d927f-4122-5413-968c-598b1780e749",
84 ),
85 (
86 &Uuid::NAMESPACE_URL,
87 "42",
88 "5c2b23de-4bad-58ee-a4b3-f22f3b9cfd7d",
89 ),
90 (
91 &Uuid::NAMESPACE_URL,
92 "lorem ipsum",
93 "15c67689-4b85-5253-86b4-49fbb138569f",
94 ),
95 (
96 &Uuid::NAMESPACE_OID,
97 "example.org",
98 "34784df9-b065-5094-92c7-00bb3da97a30",
99 ),
100 (
101 &Uuid::NAMESPACE_OID,
102 "rust-lang.org",
103 "8ef61ecb-977a-5844-ab0f-c25ef9b8d5d6",
104 ),
105 (
106 &Uuid::NAMESPACE_OID,
107 "42",
108 "ba293c61-ad33-57b9-9671-f3319f57d789",
109 ),
110 (
111 &Uuid::NAMESPACE_OID,
112 "lorem ipsum",
113 "6485290d-f79e-5380-9e64-cb4312c7b4a6",
114 ),
115 (
116 &Uuid::NAMESPACE_X500,
117 "example.org",
118 "e3635e86-f82b-5bbc-a54a-da97923e5c76",
119 ),
120 (
121 &Uuid::NAMESPACE_X500,
122 "rust-lang.org",
123 "26c9c3e9-49b7-56da-8b9f-a0fb916a71a3",
124 ),
125 (
126 &Uuid::NAMESPACE_X500,
127 "42",
128 "e4b88014-47c6-5fe0-a195-13710e5f6e27",
129 ),
130 (
131 &Uuid::NAMESPACE_X500,
132 "lorem ipsum",
133 "b11f79a5-1e6d-57ce-a4b5-ba8531ea03d0",
134 ),
135 ];
136
137 #[test]
138 #[cfg_attr(
139 all(
140 target_arch = "wasm32",
141 target_vendor = "unknown",
142 target_os = "unknown"
143 ),
144 wasm_bindgen_test
145 )]
146 fn test_get_version() {
147 let uuid = Uuid::new_v5(&Uuid::NAMESPACE_DNS, "rust-lang.org".as_bytes());
148
149 assert_eq!(uuid.get_version(), Some(Version::Sha1));
150 assert_eq!(uuid.get_version_num(), 5);
151 }
152
153 #[test]
154 #[cfg_attr(
155 all(
156 target_arch = "wasm32",
157 target_vendor = "unknown",
158 target_os = "unknown"
159 ),
160 wasm_bindgen_test
161 )]
162 fn test_hyphenated() {
163 for &(ref ns, ref name, ref expected) in FIXTURE {
164 let uuid = Uuid::new_v5(*ns, name.as_bytes());
165
166 assert_eq!(uuid.hyphenated().to_string(), *expected)
167 }
168 }
169
170 #[test]
171 #[cfg_attr(
172 all(
173 target_arch = "wasm32",
174 target_vendor = "unknown",
175 target_os = "unknown"
176 ),
177 wasm_bindgen_test
178 )]
179 fn test_new() {
180 for &(ref ns, ref name, ref u) in FIXTURE {
181 let uuid = Uuid::new_v5(*ns, name.as_bytes());
182
183 assert_eq!(uuid.get_version(), Some(Version::Sha1));
184 assert_eq!(uuid.get_variant(), Variant::RFC4122);
185 assert_eq!(Ok(uuid), u.parse());
186 }
187 }
188}