- Notifications
You must be signed in to change notification settings - Fork12
A pure-Rust KSUID implementation
License
svix/rust-ksuid
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A pure Rust and fully tested KSUID implementation
This library is fully compatible withSegment's KSUID implementation:https://github.com/segmentio/ksuid
For the Python version, please check outhttps://github.com/svix/python-ksuid
A ksuid is a K sorted UID. In other words, a KSUID also stores a date component, so that ksuids can be approximatelysorted based on the time they were created.
Read morehere.
Add the dependency:
[dependencies]svix-ksuid ="^0.6.0"
use svix_ksuid::*;let ksuid =Ksuid::new(None,None);println!("{}", ksuid.to_string());// 1srOrx2ZWZBpBUvZwXKQmoEYga2
Ksuids have a 1 second accuracy which is not sufficient for all use-cases. That's why this library exposes a higher accuracy mode which supports accuracy of up to 4ms.
It's fully compatible with normal ksuids, in fact, it outputs valid ksuids. The difference is that it sacrifices one byte of the random payload in favor of this accuracy.
The code too is fully compatible:
use svix_ksuid::*;let ksuid =KsuidMs::new(None,None);
And they both implement the sameKsuidLike
trait.
serde
- adds the ability to serialize and deserializeKsuid
andKsuidMs
using serde.
Make sure to enable like this:
[dependencies]svix-ksuid = {version ="^0.6.0",features = ["serde"] }
use svix_ksuid::*;let ksuid =Ksuid::new(None,None);// Base62println!("{}", ksuid.to_string());// also: ksuid.to_base62()// 1srOrx2ZWZBpBUvZwXKQmoEYga2// Bytes (&[u8])println!("{:?}", ksuid.bytes());// [13, 53, 196, 51, 225, 147, 62, 55, 242, 117, 112, 135, 99, 173, 199, 116, 90, 245, 231, 242]// Timestamp (time::OffsetDateTime)println!("{:?}", ksuid.timestamp());// 2021-05-21T20:04:03Z// Timestamp (seconds)println!("{}", ksuid.timestamp_seconds());1621627443// Payload (&[u8])println!("{:?}", ksuid.bytes());// [225, 147, 62, 55, 242, 117, 112, 135, 99, 173, 199, 116, 90, 245, 231, 242]
use svix_ksuid::*;// Timestamp is now, payload is randomly generatedlet ksuid =Ksuid::new(None,None);// Explicitly set eitherlet bytes =[12u8;Ksuid::PAYLOAD_BYTES];let ksuid =Ksuid::new(Some(Utc::now()),Some(&bytes));let ksuid =Ksuid::new(None,Some(&bytes));let ksuid =Ksuid::new(Some(Utc::now()),None);// From base62let base62 ="1srOrx2ZWZBpBUvZwXKQmoEYga2";let ksuid =Ksuid::from_base62(base62).unwrap();let ksuid =Ksuid::from_str(base62).unwrap();// Also implement FromStr// From byteslet bytes =[12u8;20];let ksuid =Ksuid::from_bytes(bytes.clone());assert_eq!(&bytes, ksuid.bytes());
use svix_ksuid::*;let ksuid1 =Ksuid::from_seconds(Some(1_555_555_555),None);let ksuid2 =Ksuid::from_seconds(Some(1_777_777_777),None);assert!(ksuid1 < ksuid2);assert!(ksuid1 <= ksuid2);assert!(ksuid1 == ksuid1);assert!(ksuid2 > ksuid1);assert!(ksuid2 >= ksuid1);
ksuid source code is available under an MITLicense.
All rights reserved to theSvix webhooks service.
About
A pure-Rust KSUID implementation