snowflakeid

This library generates Snowflake-style identifiers using a generic generator object and predefined profile objects.

This library requires a backend supporting unbounded integer arithmetic.

See also the cuid2, ids, nanoid, ksuid, uuid, and ulid libraries.

API documentation

Open the ../../apis/library_index.html#snowflakeid link in a web browser.

Loading

To load all entities in this library, load the loader.lgt file:

| ?- logtalk_load(snowflakeid(loader)).

Testing

To test this library predicates, load the tester.lgt file:

| ?- logtalk_load(snowflakeid(tester)).

Usage

The generic generator is the parametric object:

snowflakeid(Representation, EpochMilliseconds, TimeUnitMilliseconds, TimestampBits, NodeBits, SequenceBits, Node)

where Representation can be integer, atom, chars, or codes.

Predefined profiles are provided as objects extending the generic object:

  • snowflakeid_twitter(_Representation_)

  • snowflakeid_sonyflake(_Representation_)

  • snowflakeid_instagram(_Representation_)

The default object snowflakeid uses the Twitter-style profile with atom representation.

To generate a Snowflake ID using the default Twitter-style profile:

| ?- snowflakeid::generate(ID).
ID = '1917401915609202688'
yes

To generate a Twitter-style Snowflake ID represented as an integer:

| ?- snowflakeid_twitter(integer)::generate(ID).
ID = 1917401915609202688
yes

To generate a Sonyflake-style Snowflake ID represented as chars:

| ?- snowflakeid_sonyflake(chars)::generate(ID).
ID = ['9','2','8','5','6','7','2','8','0','1','4','8','9','5','5','7','5','9']
yes

To define a custom profile:

| ?- snowflakeid(atom, 1704067200000, 1, 41, 10, 12, 7)::generate(ID).
ID = '28842191400263680'
yes