use uuid::Uuid;
use wasm_bindgen::prelude::*;
use crate::{locales::en::person::name::last_name, utils::seeder};
pub fn uuid_v1() -> Uuid {
Uuid::new_v1(
new_timestamp(),
&[
1, 2, 3, 4, 5, 6,
],
)
}
pub fn uuid_v3() -> Uuid {
Uuid::new_v3(
&Uuid::NAMESPACE_DNS,
last_name().as_bytes(),
)
}
pub fn uuid_v4() -> Uuid {
let built = uuid::Builder::from_random_bytes(seeder::gen::<[u8; 16]>());
built.into_uuid()
}
pub fn uuid_v5() -> Uuid {
Uuid::new_v5(
&Uuid::NAMESPACE_DNS,
last_name().as_bytes(),
)
}
pub fn uuid_v6() -> Uuid {
let ts = new_timestamp();
let node_id = seeder::gen::<[u8; 6]>();
Uuid::new_v6(ts, &node_id)
}
pub fn uuid_v7() -> Uuid {
let (secs, nanos) = crate::data::datetime::unix::unix_ts_gen();
let millis = (secs * 1000).saturating_add(nanos as u64 / 1_000_000);
let bytes = seeder::gen::<[u8; 10]>();
let built = uuid::Builder::from_unix_timestamp_millis(millis, &bytes);
built.into_uuid()
}
pub fn uuid_v8() -> Uuid {
Uuid::new_v8(seeder::gen::<[u8; 16]>())
}
#[wasm_bindgen(js_name = uuid_v1)]
pub fn uuid_v1_wasm() -> String {
uuid_v1().to_string()
}
#[wasm_bindgen(js_name = uuid_v3)]
pub fn uuid_v3_wasm() -> String {
uuid_v3().to_string()
}
#[wasm_bindgen(js_name = uuid_v4)]
pub fn uuid_v4_wasm() -> String {
uuid_v4().to_string()
}
#[wasm_bindgen(js_name = uuid_v5)]
pub fn uuid_v5_wasm() -> String {
uuid_v5().to_string()
}
#[wasm_bindgen(js_name = uuid_v6)]
pub fn uuid_v6_wasm() -> String {
uuid_v6().to_string()
}
#[wasm_bindgen(js_name = uuid_v7)]
pub fn uuid_v7_wasm() -> String {
uuid_v7().to_string()
}
#[wasm_bindgen(js_name = uuid_v8)]
pub fn uuid_v8_wasm() -> String {
uuid_v8().to_string()
}
fn new_timestamp() -> uuid::Timestamp {
let context = uuid::Context::new(crate::data::defaults::types::u16());
let (seconds, nanos) = crate::data::datetime::unix::unix_ts_gen();
uuid::Timestamp::from_unix(
&context,
seconds,
nanos
)
}