Generate unique ids. A default generator is provided, based on Twitter Snowflake, which generates time-based ids. Besides that library provide IdPrettifier
which may convert Long
into user friendly id such HPJD-72036-HAPK-58077
. IdPrettifier
preserve Long's monotonicity, provides checksum and produce id with constant length (if it's not configured otherwise). It also maybe configured to user custom part sizes, separator or don't use leasing zeros to provide fixed length. More information you will find in the blogpost about it.
SBT depedency:
libraryDependencies += "com.softwaremill.common" %% "id-generator" % "1.4.0"
Examples
//create instance of it val generator:StringIdGenerator = PrettyIdGenerator.singleNode //generate ids val stringId = generator.nextId() stringId shouldNot be(empty) stringId should fullyMatch regex """[A-Z]{4}-[0-9]{5}-[A-Z]{4}-[0-9]{5}""" //or it might be used just for encoding existing ids val prettifier = IdPrettifier.default val id = prettifier.prettify(100L) //id = AAAA-00000-AAAA-01007 id should be("AAAA-00000-AAAA-01007") //get seed val origin = prettifier.toIdSeed(id) // 100L origin should be(Right(100L)) //use custom prettifier val customPrettifier = IdPrettifier.custom(encoder = new AlphabetCodec(new Alphabet("ABC")), partsSize = 4, delimiter = '_', leadingZeros = false) val customId = customPrettifier.prettify(1234567L) //BCAACAB_5671 //construct custom PrettyIdGenerator val idGenerator:IdGenerator = new IdGenerator { override def nextId(): Long = ??? override def idBaseAt(timestamp: Long): Long = ??? } val customGenerator = new PrettyIdGenerator(idGenerator, customPrettifier)