ksuid

ksuid

zig version zig doc reference Zig build License: MIT

Zig implementation K-Sortable Globally Unique IDs based on Segment’s KSUID. KSUIDs are 20-byte binary identifiers with a 32-bit timestamp (seconds since 2014-05-13) and 128 bits of random payload. The text representation is 27 base62 characters that sort lexicographically by generation time.

Usage

Fetch as a dependency in build.zig.zon:

zig fetch --save "git+https://github.com/lll/ksuid#zig-0.16"

Add the module in build.zig:

const ksuid_mod = b.dependency("ksuid", .{ .target = target, .optimize = optimize }).module("ksuid");
your_exe.root_module.addImport("ksuid", ksuid_mod);

Then in your code:

const ksuid = @import("ksuid");

// Generate a new KSUID
const id = ksuid.KSUID.generate();
std.debug.print("{s}\n", .{id.string()});

// Parse from string
const parsed = try ksuid.KSUID.parse("0ujtsYcgvSTl8PAuAdqWYSMnLOv");
std.debug.print("timestamp: {d}\n", .{parsed.timestamp()});

// Use a custom random source
var prng = std.Random.DefaultPrng.init(12345);
const id2 = ksuid.KSUID.random(prng.random());

// Sequence for ordered KSUIDs
var seq = ksuid.Sequence.init(ksuid.KSUID.generate());
const next_id = try seq.next();

// Compressed set
const set = ksuid.CompressedSet.compress(&.{id, id2});
var it = set.iter();
while (it.next()) |k| {
    std.debug.print("{s}\n", .{k.string()});
}