- Notifications
You must be signed in to change notification settings - Fork0
Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs implemented in Zig.
License
nikoksr/typeid-zig
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs implemented in Zig.
Implementation of Type-IDs in Zig. Implemented as described by the official specification:
This implementation is part of theofficial list of community provided TypeID implementations.
As per the official specification:
TypeIDs are a modern, type-safe extension of UUIDv7. Inspired by a similar use of prefixesin Stripe's APIs.
TypeIDs are canonically encoded as lowercase strings consisting of three parts:
- A type prefix (at most 63 characters in all lowercase snake_case ASCII [a-z_]).
- An underscore '_' separator
- A 128-bit UUIDv7 encoded as a 26-character string using a modified base32 encoding.
Here's an example of a TypeID of typeuser
:
user_2x4y6z8a0b1c2d3e4f5g6h7j8k │ │ │ └── 26-character base32-encoded UUIDv7 │ └── Type prefix (snake_case [a-z_]) Max length: 63 characters
Aformal specification defines the encoding in more detail.
- Add as a dependency in your
build.zig.zon
:
zig fetch --save git+https://github.com/nikoksr/typeid-zig#main
- In your
build.zig
, add thetypeid
module as a dependency:
consttypeid=b.dependency("typeid", .{ .target=target, .optimize=optimize,});exe.root_module.addImport("typeid",typeid.module("typeid"));
consttypeid=@import("typeid");constTypeID=typeid.TypeID;constStringBuf=typeid.StringBuf;// Create a new TypeID with prefixconsttid=tryTypeID.init("user");// Get string representation.// StringBuf is simply a convenience buffer that's big enough to hold a TypeID of any size.// => pub const StringBuf = [90]u8;varstr_buf:StringBuf=undefined;conststr=tid.toString(&str_buf);// "user_01h455vb4pex5vsknk084sn02q"// Parse existing TypeID stringconstparsed=tryTypeID.fromString("post_01h455vb4pex5vsknk084sn02q");
zig buildtest
About
Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs implemented in Zig.