From d03965c68bc7a3b87cfe421885e74bf442235eda Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:44:44 +0300 Subject: [PATCH] nid support --- Cargo.toml | 3 ++- src/util/sized.rs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6aa25f5..2fe38da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["codegen", "tools/create-data-file", "tools/dump-data-file"] [package] name = "data_bucket" -version = "0.3.11" +version = "0.3.12" edition = "2021" authors = ["Handy-caT"] license = "MIT" @@ -18,6 +18,7 @@ derive_more = { version = "1.0.0", features = ["from", "error", "display", "into rkyv = { version = "0.8.9", features = ["uuid-1"] } lockfree = "0.5.1" uuid = { version = "1.11.0", features = ["v4"] } +psc-nanoid = { version = "3.1.1", features = ["rkyv", "packed"] } ordered-float = "5.0.0" indexset = { version = "=0.14.0", features = ["concurrent", "cdc", "multimap"] } # indexset = { package = "wt-indexset", path = "../indexset", version = "0.12.10", features = ["concurrent", "cdc", "multimap"] } diff --git a/src/util/sized.rs b/src/util/sized.rs index 2d2834f..7a29156 100644 --- a/src/util/sized.rs +++ b/src/util/sized.rs @@ -1,5 +1,7 @@ use crate::link::{Link, LINK_LENGTH}; use ordered_float::OrderedFloat; +use psc_nanoid::packed::AlphabetPackExt; +use psc_nanoid::PackedNanoid; use rkyv::util::AlignedVec; use std::{mem, sync::Arc}; use uuid::Uuid; @@ -70,6 +72,12 @@ impl SizeMeasurable for Uuid { } } +impl SizeMeasurable for PackedNanoid { + fn aligned_size(&self) -> usize { + B + } +} + impl SizeMeasurable for OrderedFloat where T: SizeMeasurable, @@ -347,4 +355,29 @@ mod test { ) } } + + #[test] + fn test_packed_nanoid() { + use psc_nanoid::{alphabet::Base64UrlAlphabet, packed::PackedNanoid, Nanoid}; + + fn check() { + let id = Nanoid::::new(); + let packed = PackedNanoid::::pack(&id).unwrap(); + assert_eq!( + packed.aligned_size(), + rkyv::to_bytes::(&packed) + .unwrap() + .len() + ); + } + + // For Base64UrlAlphabet, PACK_BITS = 6, so B = ceil(N * 6 / 8) + check::<1, 1>(); + check::<6, 5>(); + check::<10, 8>(); + check::<21, 16>(); + check::<32, 24>(); + check::<42, 32>(); + check::<64, 48>(); + } }