From 1d010a0af528bdb75c9e9d57595c6be5f59a8411 Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Thu, 18 Dec 2025 08:31:47 -0700 Subject: [PATCH] Remove `bincode` dev-dependency `bincode` is unmaintained. See https://crates.io/crates/bincode/3.0.0 This adds `postcard` as an alternative for rustdocs --- Cargo.lock | 131 +++++++++++++++++++++++++++++++++++---- serdect/Cargo.toml | 4 +- serdect/src/lib.rs | 36 +++-------- serdect/tests/bincode.rs | 71 --------------------- 4 files changed, 129 insertions(+), 113 deletions(-) delete mode 100644 serdect/tests/bincode.rs diff --git a/Cargo.lock b/Cargo.lock index dfd7cf7f8..ceb1d0b42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,6 +86,15 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -124,15 +133,6 @@ dependencies = [ "proptest", ] -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -324,6 +324,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror", +] + [[package]] name = "const-oid" version = "0.10.1" @@ -374,6 +383,12 @@ dependencies = [ "itertools 0.10.5", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crmf" version = "0.3.0-pre.0" @@ -444,7 +459,7 @@ dependencies = [ "const-oid", "der_derive", "flagset", - "heapless", + "heapless 0.9.2", "hex-literal", "pem-rfc7468", "proptest", @@ -546,6 +561,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "equivalent" version = "1.0.2" @@ -671,6 +698,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hash32" version = "0.3.1" @@ -686,13 +722,27 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32 0.2.1", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] + [[package]] name = "heapless" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af2455f757db2b292a9b1768c4b70186d443bcb3b316252d6b540aec1cd89ed" dependencies = [ - "hash32", + "hash32 0.3.1", "stable_deref_trait", ] @@ -808,6 +858,15 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "mcf" version = "0.6.0-rc.0" @@ -978,6 +1037,19 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless 0.7.17", + "serde", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1324,6 +1396,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "scrypt" version = "0.12.0-rc.4" @@ -1431,9 +1509,9 @@ name = "serdect" version = "0.4.1" dependencies = [ "base16ct", - "bincode", "ciborium", "hex-literal", + "postcard", "proptest", "rmp-serde", "serde", @@ -1491,6 +1569,15 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "spki" version = "0.8.0-rc.4" @@ -1563,6 +1650,26 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "time" version = "0.3.41" diff --git a/serdect/Cargo.toml b/serdect/Cargo.toml index e933522c0..482a59dc1 100644 --- a/serdect/Cargo.toml +++ b/serdect/Cargo.toml @@ -19,13 +19,13 @@ rust-version = "1.85" base16ct = { version = "0.3", default-features = false } serde = { version = "1.0.184", default-features = false } -# optional featuresw +# optional features zeroize = { version = "1", optional = true, default-features = false } [dev-dependencies] -bincode = "1" ciborium = "0.2" hex-literal = "1" +postcard = { version = "1", features = ["use-std"] } proptest = "1" rmp-serde = "1" serde = { version = "1.0.184", default-features = false, features = ["derive"] } diff --git a/serdect/src/lib.rs b/serdect/src/lib.rs index a3cc6ec4a..c866fe07d 100644 --- a/serdect/src/lib.rs +++ b/serdect/src/lib.rs @@ -48,20 +48,10 @@ //! //! let data = SecretData([42; 32]); //! -//! let serialized = bincode::serialize(&data).unwrap(); -//! // bincode, a binary serialization format is serialized into bytes. -//! assert_eq!( -//! serialized.as_slice(), -//! [ -//! // Array size. -//! 32, 0, 0, 0, 0, 0, 0, 0, -//! // Actual data. -//! 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, -//! 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, -//! ] -//! ); -//! # let deserialized: SecretData = bincode::deserialize(&serialized).unwrap(); -//! # assert_eq!(deserialized, data); +//! // postcard: an embedded-friendly binary serialization format +//! let serialized = postcard::to_stdvec(&data).unwrap(); +//! let deserialized: SecretData = postcard::from_bytes(&serialized).unwrap(); +//! assert_eq!(deserialized, data); //! //! let serialized = serde_json::to_string(&data).unwrap(); //! // JSON, a human-readable serialization format, is serialized into lower-case HEX. @@ -102,20 +92,10 @@ //! //! let data = SecretData(vec![42; 32]); //! -//! let serialized = bincode::serialize(&data).unwrap(); -//! // bincode, a binary serialization format is serialized into bytes. -//! assert_eq!( -//! serialized.as_slice(), -//! [ -//! // Slice size. -//! 32, 0, 0, 0, 0, 0, 0, 0, -//! // Actual data. -//! 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, -//! 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, -//! ] -//! ); -//! # let deserialized: SecretData = bincode::deserialize(&serialized).unwrap(); -//! # assert_eq!(deserialized, data); +//! // postcard: an embedded-friendly binary serialization format +//! let serialized = postcard::to_stdvec(&data).unwrap(); +//! let deserialized: SecretData = postcard::from_bytes(&serialized).unwrap(); +//! assert_eq!(deserialized, data); //! //! let serialized = serde_json::to_string(&data).unwrap(); //! // JSON, a human-readable serialization format is serialized into lower-case HEX. diff --git a/serdect/tests/bincode.rs b/serdect/tests/bincode.rs deleted file mode 100644 index 85c0289a7..000000000 --- a/serdect/tests/bincode.rs +++ /dev/null @@ -1,71 +0,0 @@ -//! bincode-specific tests. - -#![cfg(feature = "alloc")] - -use hex_literal::hex; -use proptest::{array::*, collection::vec, prelude::*}; -use serdect::{array, slice}; - -/// Example input to be serialized. -/// Last byte is `0xFF` to test that no packing is performed for values under 128. -const EXAMPLE_BYTES: [u8; 16] = hex!("000102030405060708090A0B0C0D0EFF"); - -/// bincode serialization of [`EXAMPLE_BYTES`] as a slice. -const BINCODE_SLICE: [u8; 24] = hex!("1000000000000000000102030405060708090A0B0C0D0EFF"); - -#[test] -fn deserialize_slice() { - let deserialized = bincode::deserialize::(&BINCODE_SLICE).unwrap(); - assert_eq!(deserialized.0, EXAMPLE_BYTES); -} - -#[test] -fn deserialize_slice_owned() { - let deserialized = - bincode::deserialize_from::<_, slice::HexUpperOrBin>(BINCODE_SLICE.as_ref()).unwrap(); - assert_eq!(deserialized.0, EXAMPLE_BYTES); -} - -#[test] -fn deserialize_array() { - let deserialized = bincode::deserialize::>(&BINCODE_SLICE).unwrap(); - assert_eq!(deserialized.0, EXAMPLE_BYTES); -} - -#[test] -fn deserialize_array_owned() { - let deserialized = - bincode::deserialize_from::<_, array::HexUpperOrBin<16>>(BINCODE_SLICE.as_ref()).unwrap(); - assert_eq!(deserialized.0, EXAMPLE_BYTES); -} - -#[test] -fn serialize_slice() { - let serialized = - bincode::serialize(&slice::HexUpperOrBin::from(EXAMPLE_BYTES.as_ref())).unwrap(); - assert_eq!(&serialized, &BINCODE_SLICE); -} - -#[test] -fn serialize_array() { - let serialized = bincode::serialize(&array::HexUpperOrBin::from(EXAMPLE_BYTES)).unwrap(); - assert_eq!(&serialized, &BINCODE_SLICE); -} - -proptest! { - #[test] - fn round_trip_slice(bytes in vec(any::(), 0..1024)) { - let serialized = bincode::serialize(&slice::HexUpperOrBin::from(bytes.as_ref())).unwrap(); - let deserialized = bincode::deserialize::(&serialized).unwrap(); - prop_assert_eq!(bytes, deserialized.0); - } - - #[test] - fn round_trip_array(bytes in uniform32(0u8..)) { - let serialized = bincode::serialize(&array::HexUpperOrBin::from(bytes)).unwrap(); - let deserialized = bincode::deserialize::>(&serialized).unwrap(); - prop_assert_eq!(bytes, deserialized.0); - // 8 bytes for the length tag + 32 bytes of data - prop_assert_eq!(serialized.len(), 8 + 32); - } -}