diff --git a/rand_distr/Cargo.toml b/rand_distr/Cargo.toml index 74611bee..600157ae 100644 --- a/rand_distr/Cargo.toml +++ b/rand_distr/Cargo.toml @@ -20,7 +20,7 @@ default = ["std"] std = ["alloc", "rand/std"] alloc = ["rand/alloc"] std_math = ["num-traits/std"] -serde1 = ["serde"] +serde1 = ["serde", "rand/serde1"] [dependencies] rand = { path = "..", version = "0.8.0", default-features = false } diff --git a/rand_distr/src/weighted_alias.rs b/rand_distr/src/weighted_alias.rs index 53a9c271..2cd90c52 100644 --- a/rand_distr/src/weighted_alias.rs +++ b/rand_distr/src/weighted_alias.rs @@ -16,6 +16,8 @@ use core::iter::Sum; use core::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign}; use rand::Rng; use alloc::{boxed::Box, vec, vec::Vec}; +#[cfg(feature = "serde1")] +use serde::{Serialize, Deserialize}; /// A distribution using weighted sampling to pick a discretely selected item. /// @@ -64,6 +66,9 @@ use alloc::{boxed::Box, vec, vec::Vec}; /// [`Uniform::sample`]: Distribution::sample /// [`Uniform::sample`]: Distribution::sample #[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))] +#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "serde1", serde(bound(serialize = "W: Serialize, W::Sampler: Serialize")))] +#[cfg_attr(feature = "serde1", serde(bound(deserialize = "W: Deserialize<'de>, W::Sampler: Deserialize<'de>")))] pub struct WeightedAliasIndex { aliases: Box<[u32]>, no_alias_odds: Box<[W]>, diff --git a/src/distributions/uniform.rs b/src/distributions/uniform.rs index fb898370..c28760b0 100644 --- a/src/distributions/uniform.rs +++ b/src/distributions/uniform.rs @@ -172,6 +172,8 @@ use serde::{Serialize, Deserialize}; /// [`Rng::gen_range`]: Rng::gen_range #[derive(Clone, Copy, Debug)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "serde1", serde(bound(serialize = "X::Sampler: Serialize")))] +#[cfg_attr(feature = "serde1", serde(bound(deserialize = "X::Sampler: Deserialize<'de>")))] pub struct Uniform(X::Sampler); impl Uniform {