diff --git a/Cargo.toml b/Cargo.toml index aa1c2d6..61df636 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ keywords = ["stats", "mean", "skewness", "kurtosis", "quantile"] [dependencies] conv = { version = "0.3", default-features = false } quickersort = "3" +serde = { version = "1", default-features = false, optional = true, features = ["derive"]} [dev-dependencies] bencher = "0.1" diff --git a/src/lib.rs b/src/lib.rs index ac2860b..ec6b237 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -69,6 +69,9 @@ extern crate conv; extern crate quickersort; +#[cfg(feature = "serde")] +#[macro_use] +extern crate serde; #[macro_use] mod macros; mod moments; diff --git a/src/minmax.rs b/src/minmax.rs index 3052d44..6c27622 100644 --- a/src/minmax.rs +++ b/src/minmax.rs @@ -25,6 +25,7 @@ fn max(a: f64, b: f64) -> f64 { /// println!("The minimum is {}.", a.min()); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Min { r: Reduce f64>, } @@ -106,6 +107,7 @@ impl Merge for Min { /// assert_eq!(a.max(), 5.); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Max { r: Reduce f64>, } diff --git a/src/moments/kurtosis.rs b/src/moments/kurtosis.rs index ffba1aa..5fe04ae 100644 --- a/src/moments/kurtosis.rs +++ b/src/moments/kurtosis.rs @@ -3,6 +3,7 @@ /// /// This can be used to estimate the standard error of the mean. #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Kurtosis { /// Estimator of mean, variance and skewness. avg: Skewness, diff --git a/src/moments/mean.rs b/src/moments/mean.rs index 7aba367..d5cd465 100644 --- a/src/moments/mean.rs +++ b/src/moments/mean.rs @@ -10,6 +10,7 @@ /// println!("The mean is {}.", a.mean()); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Mean { /// Mean value. avg: f64, diff --git a/src/moments/skewness.rs b/src/moments/skewness.rs index b6aee19..29af9d8 100644 --- a/src/moments/skewness.rs +++ b/src/moments/skewness.rs @@ -3,6 +3,7 @@ /// /// This can be used to estimate the standard error of the mean. #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Skewness { /// Estimator of mean and variance. avg: MeanWithError, diff --git a/src/moments/variance.rs b/src/moments/variance.rs index f600f2d..9de9c64 100644 --- a/src/moments/variance.rs +++ b/src/moments/variance.rs @@ -13,6 +13,7 @@ /// println!("The mean is {} ± {}.", a.mean(), a.error()); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Variance { /// Estimator of average. avg: Mean, diff --git a/src/quantile.rs b/src/quantile.rs index 3c0d393..f33f1c7 100644 --- a/src/quantile.rs +++ b/src/quantile.rs @@ -10,6 +10,7 @@ use super::Estimate; // This uses the P² algorithm introduced here: // http://www.cs.wustl.edu/~jain/papers/ftp/psqr.pdf #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Quantile { /// Marker heights. q: [f64; 5], diff --git a/src/reduce.rs b/src/reduce.rs index 0036c65..4511603 100644 --- a/src/reduce.rs +++ b/src/reduce.rs @@ -7,6 +7,7 @@ use super::{Estimate, Merge}; /// Everything is calculated iteratively using constant memory, so the sequence /// of numbers can be an iterator. #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Reduce { x: f64, reduce: F, diff --git a/src/weighted_mean.rs b/src/weighted_mean.rs index 38c5ed5..ea9d8a1 100644 --- a/src/weighted_mean.rs +++ b/src/weighted_mean.rs @@ -17,6 +17,7 @@ use super::{MeanWithError, Estimate, Merge}; /// println!("The weighted mean is {}.", a.mean()); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct WeightedMean { /// Sum of the weights. weight_sum: f64, @@ -135,6 +136,7 @@ impl Merge for WeightedMean { /// println!("The weighted mean is {} ± {}.", a.weighted_mean(), a.error()); /// ``` #[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct WeightedMeanWithError { /// Sum of the squares of the weights. weight_sum_sq: f64,