UUIDs
To use the bindings from this module:
(import :std/misc/uuid)
Bindings to generate, recognize, and convert from and to universally unique identifiers (UUID) for identification purposes.
Example UUID: dae92f43-4a98-fde7-f559-c2b4c2665138
.
UUID
(UUID uuid) -> uuid | error
(UUID str) -> uuid | error
(UUID vec) -> uuid | error
(UUID sym) -> uuid | error
uuid := uuid object, will be returned
str := string representation to convert from
vec := u8vector representation to convert from
sym := symbolic representation to convert from
Creates a new uuid object from various input objects. It accepts the following inputs:
- an already constructed object, which will then be simply returned,
- a string,
- an u8vector of 16 elements,
- and finally, a symbol that's first converted to a string and processed further.
UUID
signals an error when any of these inputs are invalid UUID representations.
Examples:
> (def ustr (uuid->string (random-uuid)))
> (uuid=? (UUID ustr)
(UUID (string->symbol ustr)))
#t
uuid-length
(def uuid-length 16)
Variable that holds the number of octets that are making up the UUID.
make-uuid
(make-uuid vec str) -> uuid
vec := uuid object u8vector representation
str := uuid object string representation
Creates a new uuid object from vec, a u8vector representation, and str, a
string-representation. If str is specified as #f
, then the string
representation will be generated on demand by procedures like uuid->string
.
Examples:
;; possible random-uuid implementation:
> (import (only-in :std/crypto/etc random-bytes!))
> (def (random-uuid)
(let (bytes (make-u8vector uuid-length))
(random-bytes! bytes)
(make-uuid bytes #f)))
> (uuid->string (random-uuid))
"e26a747f-2a17-aad1-2cdf-504a25e98d02"
uuid?
(uuid? uuid) -> boolean
uuid := uuid object to check
Checks whether uuid is an actual uuid object.
Examples:
> (uuid? "337649b0-ec36-6c80-5d06-53f5586e6322")
#f
> (uuid? (string->uuid "337649b0-ec36-6c80-5d06-53f5586e6322"))
#t
uuid=?
(uuid=? u1 u2) -> boolean
u1, u2 := uuid object to compare
Compares the uuid objects u1 and u2 and checks whether these two are equal.
Two uuid objects are equal when their byte representations are equal?
.
Examples:
> (uuid=? (string->uuid "98ac7df1-204a-7932-dfdf-f466f9c9acff")
(string->uuid "a8a695fd-7d0e-bd55-46a8-5a5951500b4b"))
#f
> (def u1 (u8vector->uuid #u8(227 124 73 208 223 79 147 3 57 65 100 56 99 245 171 80)))
> (def u2 (string->uuid "e37c49d0-df4f-9303-3941-643863f5ab50"))
> (uuid=? u1 u2)
#t
uuid-hash
(uuid-hash uuid) -> fixnum
uuid := uuid object to hash
Returns the hash number of uuid, which is a small exact integer (fixnum). Two
uuid objects have the same hash value when their byte representations are
equal?
.
Examples:
> (uuid-hash (random-uuid))
318443048
> (def u1 (u8vector->uuid #u8(227 124 73 208 223 79 147 3 57 65 100 56 99 245 171 80)))
> (def u2 (string->uuid "e37c49d0-df4f-9303-3941-643863f5ab50"))
> (= (uuid-hash u1) (uuid-hash u2))
#t
uuid->u8vector
(uuid->u8vector uuid) -> u8vector
uuid := uuid object to convert
Converts uuid to its byte vector representation of length uuid-length
.
Examples:
> (uuid->u8vector (random-uuid))
#u8(70 222 137 224 229 154 122 182 255 30 187 147 111 209 17 29)
u8vector->uuid
(u8vector->uuid vec) -> uuid | error
vec := u8vector to convert
Converts vec, a u8vector representing a UUID, to an actual uuid object.
Signals an error when vec's length doesn't match uuid-length
, which is
predefined to be 16.
Examples:
> (def vec #u8(159 202 105 225 118 206 224 215 234 228 189 63 150 185 213 53))
> (u8vector-length vec)
16
> (uuid->string (u8vector->uuid vec))
"9fca69e1-76ce-e0d7-eae4-bd3f96b9d535"
uuid->string
(uuid->string uuid) -> string
uuid := uuid object to convert
Converts uuid to its easier to read string representation.
Examples:
> (uuid->string (random-uuid))
"c6bc8cd8-88c9-64fb-bddb-2bed2c663ed7"
> (uuid->string (string->uuid "ce2c3a97-504c-0926-dddd-0d2571b9a683"))
"ce2c3a97-504c-0926-dddd-0d2571b9a683"
string->uuid
(string->uuid str) -> uuid | error
str := string representing a UUID to convert
Converts str, a hex string representing a UUID, to an actual uuid object. Signals an error when str is malformed.
Examples:
> (string->uuid "39fc54b8-6c00-9ec7-638f-4bb2b83abb0a")
#<uuid #386>
> (uuid->string (string->uuid "ce2c3a97-504c-0926-dddd-0d2571b9a683"))
"ce2c3a97-504c-0926-dddd-0d2571b9a683"
random-uuid
(random-uuid) -> uuid
Generates a new pseudo-random UUID.
Examples:
> (uuid->string (random-uuid))
"eb362448-93bb-f69f-9a90-e5eec79bc0a2"
> (uuid->string (random-uuid))
"78a9cf92-d3c0-eb38-cd16-6a18251ef3f6"