Crates.io | tinyid |
lib.rs | tinyid |
version | 1.0.3 |
source | src |
created_at | 2022-05-04 13:06:40.576449 |
updated_at | 2023-01-18 20:20:52.961806 |
description | A tiny ID type that's like UUID except shorter and easier for a user to type in. |
homepage | |
repository | https://github.com/tonyb983/tinyid |
max_upload_size | |
id | 580398 |
size | 52,206 |
A small, 8-byte, ID type for use in rust applications that need a pretty unique identifier that is not required to be cryptographically secure / correct. They can be randomly generated but no work has been done to make sure that these random generations are secure (all RNG is done through the excellent fastrand
crate).
I made this type because I needed mostly / somewhat random identifiers that could be easily read and retyped by a user, but would also prevent collisions in somewhat small (less than a million or so) use-cases.
Examples collision.rs
or collision_average.rs
(beware, this can take quite a while to run) can be run to get an idea of how many IDs can be generated before collision occurs, but this is ultimately down to luck I suppose.
Generally, an average of 50-100 times gave me results in the 20 million range (IDs created before collision), but unlucky RNG has lead to results as low as 6-8 million.
The crate has either one or two dependencies, depending on whether serialization is needed. fastrand
is used for RNG, serde
is used for de/serialization only if the serde
feature flag is enabled.
Further examples can be found in ./examples/basic.rs.
use tinyid::TinyId;
// Generate a random ID.
let mut id = TinyId::random();
// Ensure that the ID is valid.
assert!(id.is_valid());
assert!(!id.is_null());
id.make_null();
assert!(!id.is_valid());
assert!(id.is_null());
assert_eq!(id, TinyId::null());
The crate only has one feature, serde
, which will enable serde serialization and deserialization of the TinyId
type. It will also bring in the serde
dependency.