Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

/p/nt/seqid/v0

Directory · 5 Files
README.md Open

v0 - Unaudited This is an initial version of this package that has not yet been formally audited. A fully audited version will be published as a subsequent release. Use in production at your own risk.

seqid - Sequential IDs

Sequential ID generator producing ordered binary and string representations suitable for use as AVL tree keys. String IDs use cford32's compact encoding and preserve lexicographic ordering.

Usage

 1import (
 2    "gno.land/p/nt/avl/v0"
 3    "gno.land/p/nt/seqid/v0"
 4)
 5
 6var (
 7    id    seqid.ID
 8    users avl.Tree
 9)
10
11func NewUser(name string) {
12    user := &User{Name: name}
13
14    // String() is human-friendly and preserves ordering.
15    users.Set(id.Next().String(), user)
16
17    // Or persist the binary form as a fixed-width 8-byte AVL key.
18    users.Set(id.Next().Binary(), user)
19}
20
21// Recover an ID from user input (case-insensitive, sanitized).
22func Lookup(raw string) (seqid.ID, error) {
23    return seqid.FromString(raw)
24}

API

 1// An ID is a sequential ID. The zero value is valid; the first
 2// Next() call returns 1.
 3type ID uint64
 4
 5// Next advances the ID and returns the new value. Panics on overflow.
 6func (i *ID) Next() ID
 7
 8// TryNext is like Next but returns false instead of panicking on overflow.
 9func (i *ID) TryNext() (ID, bool)
10
11// Binary returns a fixed 8-byte big-endian encoding of the ID, suitable
12// as an AVL key. Lexicographic order matches numeric order.
13func (i ID) Binary() string
14
15// String returns the cford32 compact encoding of the ID: 7 bytes for
16// IDs in [0, 2^34), 13 bytes after that. Lexicographic order matches
17// numeric order across the rollover.
18func (i ID) String() string
19
20// FromBinary parses a value produced by Binary.
21func FromBinary(b string) (ID, bool)
22
23// FromString parses a cford32-encoded ID. Case-insensitive; maps
24// I/L to 1 and O to 0. Always re-encode user input via FromString
25// then String() before using it as a key.
26func FromString(b string) (ID, error)

Notes

  • Binary() is the cheapest and most compact key (8 bytes, fixed width). Prefer it for internal storage. The keys work with any ITree (gno.land/p/nt/avl/v0 or gno.land/p/nt/bptree/v0); their monotonic order suits bptree's append path especially well.
  • String() is human-friendly and URL-safe; use it for IDs surfaced to users.
  • Because cford32 accepts multiple spellings for the same value, always normalize external input through FromString then String() before using it as a lookup key.