From 34827fa4b3f1431a71d57855adfd517bd0c0a374 Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 29 Aug 2026 14:57:05 +0200 Subject: [PATCH] feat: added borsh serialize --- Cargo.lock | 16 ++++++++++++++++ Cargo.toml | 1 + src/borsh.rs | 15 +++++++++++++++ src/lib.rs | 2 ++ 4 files changed, 34 insertions(+) create mode 100644 src/borsh.rs diff --git a/Cargo.lock b/Cargo.lock index cc011d5..fc87786 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,6 +40,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "borsh" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a" +dependencies = [ + "cfg_aliases", +] + [[package]] name = "bumpalo" version = "3.20.3" @@ -64,6 +73,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + [[package]] name = "ciborium" version = "0.2.2" @@ -500,6 +515,7 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" name = "smallvec" version = "2.0.0-alpha.12" dependencies = [ + "borsh", "bytes", "criterion", "malloc_size_of", diff --git a/Cargo.toml b/Cargo.toml index 912a2ed..7531d8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ serde = ["dep:serde_core"] internals = [] [dependencies] +borsh = { version = "1.8", optional = true, default-features = false } bytes = { version = "1", optional = true, default-features = false } serde_core = { version = "1.0.221", optional = true, default-features = false } malloc_size_of = { version = "0.1.1", optional = true, default-features = false } diff --git a/src/borsh.rs b/src/borsh.rs new file mode 100644 index 0000000..10f1dcb --- /dev/null +++ b/src/borsh.rs @@ -0,0 +1,15 @@ +use super::SmallVec; +use borsh::{ + io::{Result as Serial, Write}, + BorshSerialize, +}; + +impl BorshSerialize for SmallVec { + fn serialize(&self, writer: &mut Writer) -> Serial<()> { + self.len.0.serialize(writer)?; + for element in self { + element.serialize(writer)?; + } + return Ok(()); + } +} diff --git a/src/lib.rs b/src/lib.rs index 5018c7b..972b740 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,6 +65,8 @@ pub extern crate alloc; #[cfg(any(test, feature = "std"))] extern crate std; +#[cfg(feature = "borsh")] +mod borsh; mod rawsmallvec; #[cfg(test)] mod tests;