sketches_rust/
lib.rs

1/*!
2This crate provides a direct port of the [Java](https://github.com/DataDog/sketches-java)
3[DDSketch](https://arxiv.org/pdf/1908.10693.pdf) implementation to Rust.
4# Usage
5Add multiple samples to a DDSketch and invoke the `get_value_at_quantile` method to pull any quantile from
6*0.0* to *1.0*.
7
8```rust
9    use self::sketches_rust::DDSketch;
10    let mut d = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
11    d.accept(1.0);
12    d.accept(2.0);
13    d.accept(3.0);
14    let c = d.get_count();
15    assert_eq!(c, 3.0);
16    let q = d.get_value_at_quantile(0.5).unwrap();
17    assert!(q < 2.01 && q > 1.99);
18```
19
20Also you could merge other DDSketch:
21```rust
22    use self::sketches_rust::DDSketch;
23    let mut d1 = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
24    d1.accept(1.0);
25    d1.accept(2.0);
26    d1.accept(3.0);
27    assert_eq!(3.0,  d1.get_count());
28    let mut d2 = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
29    d2.accept(1.0);
30    d2.accept(2.0);
31    d2.accept(3.0);
32    assert_eq!(3.0,  d2.get_count());
33    d2.merge_with(&mut d1).unwrap();
34    assert_eq!(6.0,  d2.get_count());
35```
36
37Encode to bytes:
38```rust
39    use self::sketches_rust::{DDSketch};
40    let mut d = DDSketch::unbounded_dense(2e-2).unwrap();
41    d.accept(1.0);
42    d.accept(2.0);
43    d.accept(3.0);
44    d.accept(4.0);
45    d.accept(5.0);
46    println!("encode: {:?}", d.encode().unwrap());
47```
48
49Decode from bytes:
50```rust
51    use self::sketches_rust::{DDSketch};
52    let mut input = vec![
53        2, 42, 120, 57, 5, 47, 167, 240, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 50, 130, 1, 2, 136, 32, 0,
54        3, 0, 0, 0, 3, 0, 2, 0, 0, 3, 3, 2, 2, 3, 3, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 4, 4, 132, 64,
55        0, 4, 2, 0, 2, 2, 3, 132, 64, 4, 132, 64, 4, 2, 2, 0, 6, 4, 6, 132, 64, 2, 6,
56    ];
57    let mut d = DDSketch::decode(&input).unwrap();
58    assert_eq!(d.get_count(), 100.0);
59```
60 */
61
62mod error;
63mod index_mapping;
64mod input;
65mod output;
66mod serde;
67mod sketch;
68mod store;
69
70pub use self::error::Error;
71pub use self::sketch::DDSketch;