1use std::time::{SystemTime, UNIX_EPOCH};
2
3fn current_time() -> u128 {
4 let now = SystemTime::now();
5 let nanos = now.duration_since(UNIX_EPOCH)
6 .expect("time went backwards")
7 .as_nanos();
8 nanos
9}
10
11fn scramble(mut n: u128) -> u128 {
12 n ^= 0xDEADC0DD;
13 n <<= 0xF;
14 n |= 0xC0DE;
15 n = n.rotate_left(43);
16 n ^= 0xBAFEBEEF;
17 n = n.wrapping_add(0xDFDFDFDFDFDFDFDF);
18 n ^= 0xCFED;
19 n |= 0xADEF;
20 n = n.rotate_right(30);
21 n >>= 0xF;
22 n = n.wrapping_mul(0xD32B85533B2D22BD);
23 n ^= 0xBEEFAEA7;
24 n = n.rotate_left(24);
25 n <<= 20;
26 n ^= 0xFDFEDDDD;
27 n <<= 20;
28 n = n.wrapping_mul(0x5F23FF248FD8FF0D);
29 n
30}
31
32pub fn get_uuid() -> u128 {
33 let mut random = current_time();
34 random = scramble(random);
35 random
36}