From f6bbfcfa899a681138d52e7e1e27fe4d2e45d5f7 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Thu, 27 May 2021 10:17:01 +0100 Subject: [PATCH 1/4] serde for BlockRng, ReseedingRng and ReadRng --- Cargo.toml | 2 +- rand_core/src/block.rs | 6 ++++++ src/rngs/adapter/read.rs | 1 + src/rngs/adapter/reseeding.rs | 10 ++++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a1bfb5b5efa..ce949e016df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ include = ["src/", "LICENSE-*", "README.md", "CHANGELOG.md", "COPYRIGHT"] # Meta-features: default = ["std", "std_rng"] nightly = [] # enables performance optimizations requiring nightly rust -serde1 = ["serde"] +serde1 = ["serde", "rand_core/serde1"] # Option (enabled by default): without "std" rand uses libcore; this option # enables functionality expected to be available on a standard platform. diff --git a/rand_core/src/block.rs b/rand_core/src/block.rs index 005d071fbb6..a54cadfed7d 100644 --- a/rand_core/src/block.rs +++ b/rand_core/src/block.rs @@ -114,6 +114,12 @@ pub trait BlockRngCore { /// [`try_fill_bytes`]: RngCore::try_fill_bytes #[derive(Clone)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[cfg_attr( + feature = "serde1", + serde( + bound = "for<'x> R: Serialize + Deserialize<'x> + Sized, for<'x> R::Results: Serialize + Deserialize<'x>" + ) +)] pub struct BlockRng { results: R::Results, index: usize, diff --git a/src/rngs/adapter/read.rs b/src/rngs/adapter/read.rs index 63b0dd0c0f0..c623e4e13be 100644 --- a/src/rngs/adapter/read.rs +++ b/src/rngs/adapter/read.rs @@ -44,6 +44,7 @@ use rand_core::{impls, Error, RngCore}; /// [`OsRng`]: crate::rngs::OsRng /// [`try_fill_bytes`]: RngCore::try_fill_bytes #[derive(Debug)] +#[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))] pub struct ReadRng { reader: R, } diff --git a/src/rngs/adapter/reseeding.rs b/src/rngs/adapter/reseeding.rs index 70b0b82307f..36b492a57f3 100644 --- a/src/rngs/adapter/reseeding.rs +++ b/src/rngs/adapter/reseeding.rs @@ -14,6 +14,8 @@ use core::mem::size_of; use rand_core::block::{BlockRng, BlockRngCore}; use rand_core::{CryptoRng, Error, RngCore, SeedableRng}; +#[cfg(feature = "serde1")] +use serde::{Deserialize, Serialize}; /// A wrapper around any PRNG that implements [`BlockRngCore`], that adds the /// ability to reseed it. @@ -76,6 +78,13 @@ use rand_core::{CryptoRng, Error, RngCore, SeedableRng}; /// [`ReseedingRng::new`]: ReseedingRng::new /// [`reseed()`]: ReseedingRng::reseed #[derive(Debug)] +#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[cfg_attr( + feature = "serde1", + serde( + bound = "for<'x> R: Serialize + Deserialize<'x> + Sized, for<'x> R::Results: Serialize + Deserialize<'x>, for<'x> Rsdr: Serialize + Deserialize<'x>" + ) +)] pub struct ReseedingRng(BlockRng>) where R: BlockRngCore + SeedableRng, @@ -148,6 +157,7 @@ where } #[derive(Debug)] +#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] struct ReseedingCore { inner: R, reseeder: Rsdr, From 4726d328d6f4d02762cd5026f98a09c4bd107afa Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Thu, 27 May 2021 11:00:13 +0100 Subject: [PATCH 2/4] Update minimum version of packed_simd_2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ce949e016df..7111e48f6da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,7 +62,7 @@ serde = { version = "1.0.103", features = ["derive"], optional = true } [dependencies.packed_simd] # NOTE: so far no version works reliably due to dependence on unstable features package = "packed_simd_2" -version = "0.3.4" +version = "0.3.5" optional = true features = ["into_bits"] From e3bc4a1357b7ccf023af268f1d2a828926713e6f Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 7 Jun 2021 17:50:03 +0100 Subject: [PATCH 3/4] Do not impl serde for ReadRng or ReseedingRng --- src/rngs/adapter/read.rs | 1 - src/rngs/adapter/reseeding.rs | 10 ---------- 2 files changed, 11 deletions(-) diff --git a/src/rngs/adapter/read.rs b/src/rngs/adapter/read.rs index c623e4e13be..63b0dd0c0f0 100644 --- a/src/rngs/adapter/read.rs +++ b/src/rngs/adapter/read.rs @@ -44,7 +44,6 @@ use rand_core::{impls, Error, RngCore}; /// [`OsRng`]: crate::rngs::OsRng /// [`try_fill_bytes`]: RngCore::try_fill_bytes #[derive(Debug)] -#[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))] pub struct ReadRng { reader: R, } diff --git a/src/rngs/adapter/reseeding.rs b/src/rngs/adapter/reseeding.rs index 36b492a57f3..70b0b82307f 100644 --- a/src/rngs/adapter/reseeding.rs +++ b/src/rngs/adapter/reseeding.rs @@ -14,8 +14,6 @@ use core::mem::size_of; use rand_core::block::{BlockRng, BlockRngCore}; use rand_core::{CryptoRng, Error, RngCore, SeedableRng}; -#[cfg(feature = "serde1")] -use serde::{Deserialize, Serialize}; /// A wrapper around any PRNG that implements [`BlockRngCore`], that adds the /// ability to reseed it. @@ -78,13 +76,6 @@ use serde::{Deserialize, Serialize}; /// [`ReseedingRng::new`]: ReseedingRng::new /// [`reseed()`]: ReseedingRng::reseed #[derive(Debug)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] -#[cfg_attr( - feature = "serde1", - serde( - bound = "for<'x> R: Serialize + Deserialize<'x> + Sized, for<'x> R::Results: Serialize + Deserialize<'x>, for<'x> Rsdr: Serialize + Deserialize<'x>" - ) -)] pub struct ReseedingRng(BlockRng>) where R: BlockRngCore + SeedableRng, @@ -157,7 +148,6 @@ where } #[derive(Debug)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] struct ReseedingCore { inner: R, reseeder: Rsdr, From d167dd25d20b6b6e56fd565879c3b532625a42e5 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 7 Jun 2021 17:50:34 +0100 Subject: [PATCH 4/4] Deprecate ReadRng --- src/rngs/adapter/mod.rs | 1 + src/rngs/adapter/read.rs | 15 ++++----------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/rngs/adapter/mod.rs b/src/rngs/adapter/mod.rs index 22b7158d40f..bd1d2943233 100644 --- a/src/rngs/adapter/mod.rs +++ b/src/rngs/adapter/mod.rs @@ -11,5 +11,6 @@ mod read; mod reseeding; +#[allow(deprecated)] pub use self::read::{ReadError, ReadRng}; pub use self::reseeding::ReseedingRng; diff --git a/src/rngs/adapter/read.rs b/src/rngs/adapter/read.rs index 63b0dd0c0f0..25a9ca7fca4 100644 --- a/src/rngs/adapter/read.rs +++ b/src/rngs/adapter/read.rs @@ -9,6 +9,8 @@ //! A wrapper around any Read to treat it as an RNG. +#![allow(deprecated)] + use std::fmt; use std::io::Read; @@ -30,20 +32,10 @@ use rand_core::{impls, Error, RngCore}; /// have enough data, will only be reported through [`try_fill_bytes`]. /// The other [`RngCore`] methods will panic in case of an error. /// -/// # Example -/// -/// ``` -/// use rand::Rng; -/// use rand::rngs::adapter::ReadRng; -/// -/// let data = vec![1, 2, 3, 4, 5, 6, 7, 8]; -/// let mut rng = ReadRng::new(&data[..]); -/// println!("{:x}", rng.gen::()); -/// ``` -/// /// [`OsRng`]: crate::rngs::OsRng /// [`try_fill_bytes`]: RngCore::try_fill_bytes #[derive(Debug)] +#[deprecated(since="0.8.4", note="removal due to lack of usage")] pub struct ReadRng { reader: R, } @@ -86,6 +78,7 @@ impl RngCore for ReadRng { /// `ReadRng` error type #[derive(Debug)] +#[deprecated(since="0.8.4")] pub struct ReadError(std::io::Error); impl fmt::Display for ReadError {