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