small_uuid/
lib.rs

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(0xDFDFDFDFDFDFDFDB);
18    n ^= 0xCFED;
19    n ^= n << 0x33;
20    n |= 0xADEF;
21    n = n.rotate_right(30);
22    n >>= 0xF;
23    n = n.wrapping_mul(0xD32B85533B2D22BE);
24    n ^= 0xBEEFAEA7;
25    n = n.rotate_left(24);
26    n <<= 20;
27    n ^= 0xFDFEDDDD;
28    n <<= 20;
29    n = n.wrapping_mul(0x5F23FF248FD8FF09);
30    n ^= n >> 0x2F;
31    n
32}
33
34pub fn get_uuid(i: u128) -> u128 {
35    let mut random = current_time();
36    for _ in 1..i {
37        random = scramble(random);
38    }
39
40    random
41}