diff --git a/.github/workflows/hybrid-array.yml b/.github/workflows/hybrid-array.yml index f35de1b..acce8c9 100644 --- a/.github/workflows/hybrid-array.yml +++ b/.github/workflows/hybrid-array.yml @@ -37,8 +37,7 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} - uses: RustCrypto/actions/cargo-hack-install@master - - run: cargo hack build --target ${{ matrix.target }} --feature-powerset --optional-deps bytemuck,serde,subtle,zeroize - - run: cargo build --all-features --release + - run: cargo hack build --target ${{ matrix.target }} --feature-powerset --exclude-all-features --optional-deps bytemuck,serde,subtle,zeroize careful: runs-on: ubuntu-latest @@ -106,5 +105,5 @@ jobs: with: toolchain: ${{ matrix.toolchain }} - uses: RustCrypto/actions/cargo-hack-install@master - - run: cargo hack test --feature-powerset --optional-deps bytemuck,serde,subtle,zeroize + - run: cargo hack test --feature-powerset --optional-deps arbitrary,bytemuck,serde,subtle,zeroize --group-features arbitrary,bytemuck,serde,subtle,zeroize - run: cargo test --all-features --release diff --git a/Cargo.lock b/Cargo.lock index fed97c9..27de203 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" + [[package]] name = "bincode" version = "2.0.1" @@ -32,6 +38,7 @@ checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" name = "hybrid-array" version = "0.4.4" dependencies = [ + "arbitrary", "bincode", "bytemuck", "serde", diff --git a/Cargo.toml b/Cargo.toml index 146c975..507dedb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ rust-version = "1.85" typenum = { version = "1.17", features = ["const-generics"] } # optional dependencies +arbitrary = { version = "1", optional = true } bytemuck = { version = "1", optional = true, default-features = false } serde = { version = "1", optional = true, default-features = false } subtle = { version = "2", optional = true, default-features = false, features = ["const-generics"] } diff --git a/src/lib.rs b/src/lib.rs index 47977a8..1dd969d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -145,6 +145,9 @@ use core::{ }; use typenum::{Diff, Sum}; +#[cfg(feature = "arbitrary")] +use arbitrary::Arbitrary; + #[cfg(feature = "bytemuck")] use bytemuck::{Pod, Zeroable}; @@ -1028,6 +1031,17 @@ where } } +#[cfg(feature = "arbitrary")] +impl<'a, T, U> Arbitrary<'a> for Array +where + T: Arbitrary<'a>, + U: ArraySize, +{ + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { + Self::try_from_fn(|_n| Arbitrary::arbitrary(u)) + } +} + #[cfg(feature = "bytemuck")] unsafe impl Pod for Array where