use crate::char::char_uuid;
#[derive(Debug, Clone, Copy)]
pub enum UUID {
V4,
Nonstandard,
}
fn gen_uuid(version: UUID, separators: bool) -> String {
let mut output = String::from("");
let mut c: char;
for _n in 1..=8 {
c = char_uuid(version);
output.push(c);
}
if separators {
output.push('-'); }
for _n in 1..=3 {
for _x in 1..=4 {
c = char_uuid(version);
output.push(c);
}
if separators {
output.push('-');
}
}
for _n in 1..=12 {
c = char_uuid(version);
output.push(c);
}
output }
pub fn uuid() -> String {
uuid4()
}
pub fn uuid4() -> String {
gen_uuid(UUID::V4, true)
}
pub fn uuidn() -> String {
gen_uuid(UUID::Nonstandard, true)
}
pub fn uuid_no_seps() -> String {
uuid4_no_seps()
}
pub fn uuid4_no_seps() -> String {
gen_uuid(UUID::V4, false)
}
pub fn uuidn_no_seps() -> String {
gen_uuid(UUID::Nonstandard, false)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::test_utils::test_valid_uuid;
#[test]
fn test_uuid4() {
let success = test_valid_uuid(UUID::V4);
if !success {
panic!("uuid4() generated an invalid uuid.");
}
}
#[test]
fn test_uuidn() {
let success = test_valid_uuid(UUID::Nonstandard);
if !success {
panic!("uuidn() generated an invalid uuid.");
}
}
}