diff --git a/Cargo.lock b/Cargo.lock index 1efcbf8..b6ff067 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,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" @@ -70,6 +79,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" @@ -507,6 +522,7 @@ name = "smallvec" version = "2.0.0-alpha.12" dependencies = [ "arbitrary", + "borsh", "bytes", "criterion", "malloc_size_of", diff --git a/Cargo.toml b/Cargo.toml index 1b7957f..5d4fb1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ internals = [] [dependencies] arbitrary = { version = "1", optional = true, default-features = false } +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..f7cc33f --- /dev/null +++ b/src/borsh.rs @@ -0,0 +1,20 @@ +use { + super::SmallVec, + borsh::{ + BorshSerialize, + io::{ + Result as Serial, + Write + } + } +}; + +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 9eaa7a2..7a5b656 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(feature = "bytes")]