apache-datasketches-sys 0.2.0

Raw cxx bridge to Apache DataSketches C++ (do not use directly; see apache-datasketches)
Documentation
#[cxx::bridge(namespace = "apache_datasketches_rs")]
pub mod ffi {
    #[derive(Debug, Clone, Copy, PartialEq, Eq)]
    enum TargetHllType {
        Hll4,
        Hll6,
        Hll8,
    }

    unsafe extern "C++" {
        include!("hll_sketch_shim.h");
        include!("hll_union_shim.h");

        type HllSketchShim;

        fn new_hll_sketch(
            lg_config_k: u8,
            tgt_type: TargetHllType,
        ) -> Result<UniquePtr<HllSketchShim>>;
        fn hll_sketch_copy_as(
            sketch: &HllSketchShim,
            tgt_type: TargetHllType,
        ) -> UniquePtr<HllSketchShim>;
        fn hll_sketch_deserialize(bytes: &[u8]) -> Result<UniquePtr<HllSketchShim>>;

        fn update_u64(self: Pin<&mut HllSketchShim>, value: u64);
        fn update_i64(self: Pin<&mut HllSketchShim>, value: i64);
        fn update_f64(self: Pin<&mut HllSketchShim>, value: f64);
        fn update_str(self: Pin<&mut HllSketchShim>, value: &str);
        fn update_bytes(self: Pin<&mut HllSketchShim>, value: &[u8]);

        fn get_estimate(self: &HllSketchShim) -> f64;
        fn get_lower_bound(self: &HllSketchShim, num_std_dev: u8) -> Result<f64>;
        fn get_upper_bound(self: &HllSketchShim, num_std_dev: u8) -> Result<f64>;
        fn get_lg_config_k(self: &HllSketchShim) -> u8;
        fn get_target_type(self: &HllSketchShim) -> TargetHllType;
        fn is_empty(self: &HllSketchShim) -> bool;
        fn reset(self: Pin<&mut HllSketchShim>);
        fn to_string_summary(self: &HllSketchShim) -> String;

        fn serialize_compact(self: &HllSketchShim) -> Vec<u8>;
        fn serialize_updatable(self: &HllSketchShim) -> Vec<u8>;

        type HllUnionShim;

        fn new_hll_union(lg_max_k: u8) -> Result<UniquePtr<HllUnionShim>>;

        fn update_sketch(self: Pin<&mut HllUnionShim>, sketch: &HllSketchShim);
        fn update_u64(self: Pin<&mut HllUnionShim>, value: u64);
        fn update_i64(self: Pin<&mut HllUnionShim>, value: i64);
        fn update_f64(self: Pin<&mut HllUnionShim>, value: f64);
        fn update_str(self: Pin<&mut HllUnionShim>, value: &str);
        fn update_bytes(self: Pin<&mut HllUnionShim>, value: &[u8]);

        fn get_result(self: &HllUnionShim, tgt_type: TargetHllType) -> UniquePtr<HllSketchShim>;

        fn serialize_compact(self: &HllUnionShim, tgt_type: TargetHllType) -> Vec<u8>;
        fn serialize_updatable(self: &HllUnionShim, tgt_type: TargetHllType) -> Vec<u8>;

        fn get_estimate(self: &HllUnionShim) -> f64;
        fn get_lower_bound(self: &HllUnionShim, num_std_dev: u8) -> Result<f64>;
        fn get_upper_bound(self: &HllUnionShim, num_std_dev: u8) -> Result<f64>;
        fn is_empty(self: &HllUnionShim) -> bool;
        fn reset(self: Pin<&mut HllUnionShim>);
    }
}