opendp 0.9.2-nightly.20240402.1

A library of differential privacy algorithms for the statistical analysis of sensitive private data.
Documentation
[workspace.package]
version = "0.9.2-nightly.20240402.1"
license-file = "../LICENSE"
readme = "../README.md"
homepage = "https://opendp.org/"
repository = "https://github.com/opendp/opendp"
authors = ["The OpenDP Project <info@opendp.org>"]
edition = "2021"
rust-version = "1.64.0" # MSRV via `cargo install cargo-msrv && cargo msrv --min 1.49.0 -- cargo check --features=untrusted,bindings`

[workspace]
members = [".", "opendp_derive", "opendp_tooling"]

[workspace.dependencies]
syn = { version = "1.0", features = ["full", "parsing"] }
quote = { version = "1.0" }
proc-macro2 = { version = "1.0" }

[package]
name = "opendp"
description = "A library of differential privacy algorithms for the statistical analysis of sensitive private data."
build = "build/main.rs"
version.workspace = true
license-file.workspace = true
readme.workspace = true
homepage.workspace = true
repository.workspace = true
authors.workspace = true
edition.workspace = true
rust-version.workspace = true

exclude = ["windows/*"]

[dependencies]
opendp_derive = { path = "opendp_derive", version = "0.9.2-nightly.20240402.1" }
rand = "0.7.3"
num = "0.3.1"
thiserror = "1.0.24"
statrs = "0.13.0"
dashu = "0.4.0"
openssl = { version = "0.10.29", features = ["vendored"], optional = true }
opendp_tooling = { path = "opendp_tooling", optional = true, version = "0.9.2-nightly.20240402.1" }
readonly = "0.2"

lazy_static = { version = "1.4.0", optional = true }
vega_lite_4 = { version = "0.6.0", optional = true }

[build-dependencies]
opendp_tooling = { path = "opendp_tooling", optional = true, version = "0.9.2-nightly.20240402.1" }
syn = { workspace = true, optional = true }
proc-macro2 = { workspace = true, optional = true }
cbindgen = { version = "0.20.0", optional = true }

[features]
default = ["partials", "use-openssl"]

floating-point = []
contrib = []
honest-but-curious = []
untrusted = ["floating-point", "contrib", "honest-but-curious"]

use-openssl = ["openssl"]

# for plotting in unit tests
test-plot = ["vega_lite_4"]

# include extern "C" functions in cdylib
ffi = ["lazy_static", "cbindgen"]
# execute proc macros to insert proof links
derive = ["opendp_tooling", "opendp_derive/full", "syn", "proc-macro2"]

# deprecated
bindings-python = ["bindings"]
# generate language bindings
bindings = ["ffi", "derive"]

# generate "then_xxx" functions in Rust for "make_xxx" functions whose first two arguments are the metric space
partials = ["derive", "opendp_derive/partials"]

[lib]
crate-type = ["rlib", "cdylib", "staticlib"]

[package.metadata.docs.rs]
features = ["derive", "untrusted", "ffi"]
rustdoc-args = [
    # so that latex renders
    "--html-in-header", "katex.html",
    
    # so that proof documents are visible
    "--document-private-items"
]