From dd5e1852f9f5b95c1456ecdbe5087d2cc1d9c949 Mon Sep 17 00:00:00 2001 From: bolshoytoster Date: Wed, 2 Sep 2026 19:26:41 +0100 Subject: [PATCH] Port #392 to v2 --- Cargo.toml | 5 +++++ src/lib.rs | 8 ++++++++ tests/encase.rs | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 tests/encase.rs diff --git a/Cargo.toml b/Cargo.toml index b19500b..39979ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ arbitrary = { version = "1.4", optional = true, default-features = false } borsh = { version = "1.8", optional = true, features = ["derive", "unstable__schema"], default-features = false } bytes = { version = "1.12", optional = true, default-features = false } defmt = { version = "1.1", optional = true, default-features = false } +encase = { version = "0.12", optional = true, default-features = false } rayon = { version = "1.12", optional = true, default-features = false } serde_core = { version = "1.0", optional = true, default-features = false } malloc_size_of = { version = "0.1", optional = true, default-features = false } @@ -50,6 +51,10 @@ required-features = ["borsh"] name = "bytes" required-features = ["bytes"] +[[test]] +name = "encase" +required-features = ["encase"] + [[test]] name = "rayon" required-features = ["rayon"] diff --git a/src/lib.rs b/src/lib.rs index 99aeff5..5158233 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,6 +52,11 @@ //! [Rustonomicon](https://doc.rust-lang.org/1.42.0/nomicon/dropck.html#an-escape-hatch). //! //! Tracking issue: [rust-lang/rust#34761](https://github.com/rust-lang/rust/issues/34761) +//! +//! ### `encase` +//! +//! When this optional dependency is enabled, `SmallVec` implements `encase`'s +//! traits. #![no_std] #![cfg_attr(docsrs, feature(doc_cfg))] @@ -2814,3 +2819,6 @@ impl Format for SmallVec { dewrite!(fmt, "{=[?]}", self.as_ref()); } } + +#[cfg(feature = "encase")] +encase::rts_array::impl_rts_array!(SmallVec; (T, const N: usize); using len truncate); diff --git a/tests/encase.rs b/tests/encase.rs new file mode 100644 index 0000000..d871637 --- /dev/null +++ b/tests/encase.rs @@ -0,0 +1,20 @@ +use smallvec::SmallVec; + +#[test] +fn test_encase() { + let v = SmallVec::::from([1.43_f32, 4.05, 4.55]); + + let mut buf = [255u8; 12]; + let mut s_buf = encase::StorageBuffer::new(&mut buf); + + s_buf.write(&v).unwrap(); + assert_eq!(&s_buf.as_ref()[0..][..4], &v[0].to_le_bytes()); + assert_eq!(&s_buf.as_ref()[4..][..4], &v[1].to_le_bytes()); + assert_eq!(&s_buf.as_ref()[8..][..4], &v[2].to_le_bytes()); + + let mut v_out: SmallVec = SmallVec::new(); + s_buf.read(&mut v_out).unwrap(); + assert_eq!(v, v_out); + + assert_eq!(v, s_buf.create::>().unwrap()); +}