srctree

David Zero parent 066eb85d 8b716e09
util/uuid: Add new_uuid function

This is preparation for Blob/Object URL generation

inlinesplit
util/BUILD added: 78, removed: 3, total 75
@@ -3,6 +3,7 @@ load("//bzl:copts.bzl", "HASTUR_COPTS")
 
dependencies = {
"base_parser": [":string"],
"uuid": ["@fmt"],
}
 
[cc_library(
 
filename was Deleted added: 78, removed: 3, total 75
@@ -0,0 +1,44 @@
// SPDX-FileCopyrightText: 2023 David Zero <zero-one@zer0-one.net>
//
// SPDX-License-Identifier: BSD-2-Clause
 
#ifndef UTIL_UUID_H_
#define UTIL_UUID_H_
 
#include <random>
 
#include <fmt/core.h>
 
namespace util {
inline std::string new_uuid() {
unsigned char data[16];
std::string uuid_string;
 
std::random_device rando;
 
for (size_t i = 0; i < 16; i++) {
data[i] = static_cast<unsigned char>(rando());
}
 
// Set UUID version bits
data[6] &= 0x0f;
data[6] |= 0x40;
 
// Set UUID variant bits
data[8] &= 0x3f;
data[8] |= 0x80;
 
for (size_t i = 0; i < 16; i++) {
if (i == 4 || i == 6 || i == 8 || i == 10) {
uuid_string += '-';
}
 
uuid_string += fmt::format("{:02x}", data[i]);
}
 
return uuid_string;
}
 
} // namespace util
 
#endif
 
filename was Deleted added: 78, removed: 3, total 75
@@ -0,0 +1,30 @@
// SPDX-FileCopyrightText: 2023 David Zero <zero-one@zer0-one.net>
//
// SPDX-License-Identifier: BSD-2-Clause
 
#include "util/uuid.h"
 
#include "etest/etest.h"
 
#include <iostream>
#include <string>
 
using etest::require;
 
int main() {
etest::test("UUID formatting", [] {
std::string u = util::new_uuid();
 
std::cout << "Generated UUID: " << u << "\n";
 
require(u.size() == 36);
require(u[8] == '-');
require(u[13] == '-');
require(u[18] == '-');
require(u[23] == '-');
});
 
// To-Do(dzero): Add collision test
 
return etest::run_all_tests();
}