Skip to content

Commit 5095b2c

Browse files
committed
Add support for rkyv
1 parent 482338a commit 5095b2c

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ repository = "https://github.com/dylanhart/ulid-rs"
1616
default = ["std"]
1717
std = ["rand"]
1818
postgres = ["dep:postgres-types", "dep:bytes"]
19+
rkyv = ["dep:rkyv"]
1920

2021
[dependencies]
2122
serde = { version = "1.0", optional = true }
2223
rand = { version = "0.9", optional = true }
2324
uuid = { version = "1.1", optional = true }
2425
postgres-types = { version = "0.2.6", optional = true }
2526
bytes = { version = "1.4.0", optional = true }
27+
rkyv = { version = "0.8.10", optional = true }
2628

2729
[target.wasm32-unknown-unknown.dependencies]
2830
web-time = "1"

src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ mod base32;
4040
mod generator;
4141
#[cfg(feature = "postgres")]
4242
mod postgres;
43+
#[cfg(feature = "rkyv")]
44+
mod rkyv;
4345
#[cfg(feature = "serde")]
4446
pub mod serde;
4547
#[cfg(feature = "std")]
@@ -75,6 +77,10 @@ pub(crate) use bitmask;
7577
/// remaining 80 are random. The first 48 provide for lexicographic sorting and
7678
/// the remaining 80 ensure that the identifier is unique.
7779
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Hash, Clone, Copy)]
80+
#[cfg_attr(
81+
feature = "rkyv",
82+
derive(::rkyv::Archive, ::rkyv::Serialize, ::rkyv::Deserialize)
83+
)]
7884
pub struct Ulid(pub u128);
7985

8086
impl Ulid {

src/rkyv.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#[cfg(test)]
2+
mod tests {
3+
use crate::Ulid;
4+
use rkyv::{{from_bytes, to_bytes}, rancor::Error};
5+
6+
#[test]
7+
fn test_ulid_roundtrip() {
8+
// Create a ULID
9+
let id = Ulid::new();
10+
let id_string = id.to_string();
11+
12+
// Serialize it
13+
let bytes = to_bytes::<Error>(&id).unwrap();
14+
15+
// Deserialize back
16+
let deserialized: Ulid = from_bytes::<_, Error>(&bytes).unwrap();
17+
18+
// Verify equality
19+
assert_eq!(id, deserialized);
20+
assert_eq!(id_string, deserialized.to_string());
21+
}
22+
}

0 commit comments

Comments
 (0)