| Crates.io | ddsketchy |
| lib.rs | ddsketchy |
| version | 0.1.1 |
| created_at | 2025-09-21 11:16:53.720526+00 |
| updated_at | 2025-09-21 11:16:53.720526+00 |
| description | DD Sketch in Rust |
| homepage | |
| repository | https://github.com/pmcgleenon/ddsketchy |
| max_upload_size | |
| id | 1848731 |
| size | 603,712 |

This is a Rust implementation of the DDSketch quantile sketch algorithm. DDSketch is a fully-mergeable quantile sketch with relative-error guarantees.
use ddsketchy::{DDSketch, DDSketchError};
fn main() -> Result<(), DDSketchError> {
// Create a new sketch with 1% relative error
let mut sketch = DDSketch::new(0.01)?;
// Add some values
sketch.add(1.0);
sketch.add(2.0);
sketch.add(3.0);
sketch.add(4.0);
sketch.add(5.0);
// Get the 50th percentile (median)
let median = sketch.quantile(0.5)?;
println!("Median: {}", median);
// Get the 90th percentile
let p90 = sketch.quantile(0.9)?;
println!("90th percentile: {}", p90);
Ok(())
}
ddsketchy supports optional serialization via serde. Serialization is disabled by default to keep the library dependency-free. To enable it, add the serde feature:
[dependencies]
ddsketchy = { version = "0.1", features = ["serde"] }
serde_json = "1.0" # or other serde formats
use ddsketchy::DDSketch;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut sketch = DDSketch::new(0.01)?;
sketch.add(1.0);
sketch.add(2.0);
// Serialize to JSON
let json = serde_json::to_string(&sketch)?;
println!("Serialized: {}", json);
// Deserialize from JSON
let restored: DDSketch = serde_json::from_str(&json)?;
// Verify the sketch works correctly
assert_eq!(sketch.count(), restored.count());
assert_eq!(sketch.quantile(0.5)?, restored.quantile(0.5)?);
Ok(())
}
The serialization handles all internal state including infinity values for min/max bounds in empty sketches. Empty sketches serialize min/max as null values, while sketches with data serialize them as numbers.
This crate supports Rust 1.81.0 and later. We follow a rolling MSRV policy of approximately 1 year behind the latest stable release. MSRV increases may occur in minor releases and will be noted in the changelog.