src/misc/id

Source   Edit  

Nim OID support. An OID is a global ID that consists of a timestamp, a unique counter and a random value. This combination should suffice to produce a globally distributed unique ID.

This implementation calls initRand() for the first call of genOid.

Types

Id = distinct Oid
Source   Edit  
Oid = object
An OID. Source   Edit  

Lets

null = idNone()
Source   Edit  

Procs

func `$`(id: Id): string {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc `$`(oid: Oid): string {....raises: [], tags: [], forbids: [].}
Converts an OID to a string.

Example:

let oid = constructOid(time = -1707874974, fuzz = -148288170, count = 507876210)
doAssert ($oid) == "62e5339a564d29f77293451e"
Source   Edit  
proc `==`(idA: Id; idB: Id): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc `==`(oid1: Oid; oid2: Oid): bool {.inline, ...raises: [], tags: [],
                                        forbids: [].}
Compares two OIDs for equality. Source   Edit  
proc bigEndian32(b: int32): int32 {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc construct(time, fuzz, count: int32): Id {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc constructOid(time: int32; fuzz: int32; count: int32): Oid {....raises: [],
    tags: [], forbids: [].}
Source   Edit  
proc deconstruct(id: Id): tuple[time: int32, fuzz: int32, count: int32] {.
    borrow, ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc deconstruct(oid: Oid): tuple[time: int32, fuzz: int32, count: int32] {.
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc fromJsonHook(id: var Id; json: JsonNode) {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc generatedTime(oid: Oid): Time {....raises: [], tags: [], forbids: [].}
Returns the generated timestamp of the OID. Source   Edit  
proc genOid(): Oid {....raises: [], tags: [TimeEffect], forbids: [].}
Generates a new OID.

Example:

doAssert ($genOid()).len == 24

Example: cmd: -r:off

echo $genOid() # for example, "5fc7f546ddbbc84800006aaf"
Source   Edit  
proc handleHexChar(c: char): int {.inline, ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc hash(id: Id): Hash {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc hash(oid: Oid): Hash {....raises: [], tags: [], forbids: [].}
Generates the hash of an OID for use in hashtables. Source   Edit  
proc hexbyte(hex: char): int {.inline, ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc idNone(): Id {....raises: [], tags: [], forbids: [].}
Source   Edit  
func idToString(id: Id): cstring {.exportc, ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc isNone(id: Id): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc isSome(id: Id): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc newId(): Id {....raises: [], tags: [TimeEffect], forbids: [].}
Source   Edit  
proc parseId(s: string): Id {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc parseOid(str: string): Oid {....raises: [], tags: [], forbids: [].}
Parses an OID.

Example:

let oid = parseOid("62e5339a564d29f77293451e").deconstruct
doAssert oid.time == -1707874974 and oid.fuzz == -148288170 and oid.count == 507876210
Source   Edit  
proc timestamp(id: Id): Time {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc toCString(oid: Oid): cstring {.exportc, ...raises: [], tags: [], forbids: [].}
Converts an OID to a string.

Example:

let oid = constructOid(time = -1707874974, fuzz = -148288170, count = 507876210)
doAssert oid.toCString == "62e5339a564d29f77293451e"
Source   Edit  
proc toJson(id: Id; opt = initToJsonOptions()): JsonNode {....raises: [], tags: [],
    forbids: [].}
Source   Edit