Provides support for universally unique identifiers that confirm to the ULID spec.

You can generate ULIDs as String or u128. You can convert ULIDs between String and u128.

``` use oysterpackuid::{ ulid, ulidu128, ulidu128intostring, ulidstrintou128 };

// generates a new ULID as a string let idstr = ulid(); // generates a new ULID as u128 let idu128 = ulid_u128();

// conversions between string and u128 ULIDs let ulidstr = ulidu128intostring(idu128); asserteq!(ulidstrintou128(&ulidstr).unwrap(), id_u128); ```

You can define type safe ULID based unique identifiers (Uid):

Uid for structs

rust use oysterpack_uid::Uid; struct User; type UserId = Uid<User>; let id = UserId::new();

Uid for traits

rust use oysterpack_uid::Uid; trait Foo{} // Send + Sync are added to the type def in order to satisfy Uid type constraints for thread safety, // i.e., in order to be able to send the Uid across threads. type FooId = Uid<dyn Foo + Send + Sync>; let id = FooId::new(); By default, Uid is serializable via serde. If serialization is not needed then you can opt out by including the dependency with default features disabled : default-features = false.