From 9bd8017e208bd04ac016a3fbf1f1102136228e90 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Thu, 8 Jul 2021 15:09:53 +0100 Subject: [PATCH] impl serde for rand_distr::WeightedAliasIndex; fix bounds for Uniform --- rand_distr/Cargo.toml | 2 +- rand_distr/src/weighted_alias.rs | 5 +++++ src/distributions/uniform.rs | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) 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 {