A trait and implementations for unique ID generators.
This crate provides four simple traits, starting with Generator
. This will return successive unique identifiers, the
only requirement of an identifier being that it implements PartialEq
.
Each implemented generator is in its own feature, by default all of which are included.
RandomGenerator
, in
feature random
, provides a random number scheme returning u128
values. Depends on the
uuid crate.SequenceGenerator
,
in feature sequence
, provides monotonically increasing u64 values in a thread safe manner. Depends on the
atomicrefcell and lazystatic
crates.StringGenerator
, in
feature string
, provides random string values. Depends on the blob-uuid crate.The following shows an example of the StringGenerator
implementation.
```rust use uniqueid::Generator; use uniqueid::string::StringGenerator;
let gen = StringGenerator::default(); let mut last = gen.nextid(); for _ in 1..100000 { let next = gen.nextid(); assertne!(last, next); last = next; } ```
The cargo bench
command will run a comparison benchmark to show the relative performance of all generators. This
benchmark is in benches/compare.cs
and uses Criterion for report generation.
```bash $ cargo bench
Finished bench [optimized] target(s) in 17.16s
Running target/release/deps/unique_id-4944964a39587480
running 3 tests test random::tests::testsomething ... ignored test sequence::tests::testsomething ... ignored test string::tests::test_something ... ignored
test result: ok. 0 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out
Running target/release/deps/compare-cfeb3571caa9de30
Compare Implementations/string time: [928.16 ns 1.0963 us 1.2829 us] change: [+108.47% +224.51% +419.70%] (p = 0.00 < 0.05) Performance has regressed. Found 3 outliers among 100 measurements (3.00%) 1 (1.00%) high mild 2 (2.00%) high severe Compare Implementations/integer time: [21.033 ns 21.434 ns 21.885 ns] change: [-4.1097% +0.4756% +5.4467%] (p = 0.84 > 0.05) No change in performance detected. Found 4 outliers among 100 measurements (4.00%) 2 (2.00%) high mild 2 (2.00%) high severe Compare Implementations/random time: [36.741 ns 38.285 ns 40.487 ns] change: [-33.414% -24.047% -13.624%] (p = 0.00 < 0.05) Performance has improved. Found 7 outliers among 100 measurements (7.00%) 2 (2.00%) high mild 5 (5.00%) high severe ```
The output can be found in target/criterion/report/index.html
.
Version 0.1.5
SequenceGenerator
.atomic_refcell
dependency.Version 0.1.4
uuid
and blob-uuid
via dependabot.PhantomData
in generator structures.Version 0.1.3
tests/unique.rs
.integer
to sequence
in benchmarks.Version 0.1.2
RandomGenerator
implementation.#[inline]
to some functions.Version 0.1.1
GeneratorFromSeed
and implementation for SequenceGenerator
.Version 0.1.0
Generator
, GeneratorWithInvalid
, and GeneratorFromStr
.StringGenerator
using UUIDsSequenceGenerator
using i64