cedarling 0.0.39

The Cedarling: a high-performance local authorization service powered by the Rust Cedar Engine.
Documentation
[package]
name = "cedarling"
version = "0.0.39"
edition = "2024"
description = "The Cedarling: a high-performance local authorization service powered by the Rust Cedar Engine."
license = "Apache-2.0"
publish = true

[features]
default = ["grpc"]
# blocking feature allows to use blocking cedarling client
blocking = ["tokio/rt-multi-thread"]
# gRPC transport for Lock Server communication (enabled by default)
grpc = [
    "dep:tonic",
    "dep:prost",
    "dep:prost-types",
    "dep:tonic-prost",
    "dep:tonic-prost-build",
    "dep:tonic-web-wasm-client",
]

[dependencies]
serde = { workspace = true }
serde_json = { workspace = true, features = ["raw_value"] }
serde_yaml_ng = "0.10.0"
thiserror = { workspace = true }
uuid7 = { version = "1.8.0", features = [
    "serde",
    "uuid",
    "rand010",
], default-features = false }
cedar-policy = { version = "4.11.2", features = ["partial-eval"] }
cedar-policy-core = "4.11.2"
base64 = "0.22.1"
url = "2.5.8"
jsonwebtoken = { workspace = true }
reqwest = { workspace = true }
typed-builder = "0.23.2"
semver = { version = "1.0.28", features = ["serde"] }
derive_more = { workspace = true, features = [
    "deref",
    "from",
    "display",
    "error",
] }
time = { version = "0.3.53", features = ["wasm-bindgen"] }
chrono = { workspace = true }
tokio = { workspace = true, features = ["macros", "time"] }
tokio-util = { workspace = true }
rand = "0.10.2"
smol_str = "0.3.6"
strum = { version = "0.28.0", features = ["derive"] }
flate2 = "1.1.9"
async-trait = "0.1.89"
futures = "0.3.32"
wasm-bindgen-futures = { workspace = true }
config = "0.15.25"
ahash = { version = "0.8.12", default-features = false, features = [
    "no-rng",
    "std",
] }
vfs = "0.13.0"
# aes-crypto is intentionally excluded from zip default features.
# zip's aes-crypto pulls in constant_time_eq@^0.4 (MSRV = 1.95.0), which is
# incompatible with the nightly-2025-09-18 toolchain used by the dylint CI job.
# cedarling only reads/writes zip archives with Deflated compression;
# AES-encrypted zip support is not required.
# If AES-encrypted zip support is ever needed, re-enable aes-crypto here AND
# update custom-lints/rust-toolchain to a nightly >= rustc 1.95.0.
zip = { version = "8.6.0", default-features = false, features = [
    "bzip2",
    "deflate64",
    "deflate",
    "lzma",
    "ppmd",
    "time",
    "zstd",
    "xz",
] }
prost = { version = "0.14.4", optional = true }
prost-types = { version = "0.14.3", optional = true }
tonic-prost = { version = "0.14.6", optional = true }
hdrhistogram = "7.5.4"
arc-swap = "1.9.2"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
tonic = { version = "0.14.6", optional = true, features = ["tls-native-roots"] }

[target.'cfg(target_family = "wasm")'.dependencies]
gloo-timers = { version = "0.4.0", features = ["futures"] }

[target.'cfg(target_arch = "wasm32")'.dependencies]
web-sys = { workspace = true, features = ["console"] }
# override getrandom to use `wasm_js` feature
getrandom_02 = { package = "getrandom", version = "0.2", features = ["js"] }
getrandom_03 = { package = "getrandom", version = "0.3", features = [
    "wasm_js",
] }
getrandom_04 = { package = "getrandom", version = "0.4", features = [
    "wasm_js",
] }
tonic = { version = "0.14.3", optional = true, default-features = false, features = [
    "codegen",
] }
tonic-web-wasm-client = { version = "0.9.0", optional = true }


[dev-dependencies]
# is used in testing
test_utils = { workspace = true }
jsonwebkey = { workspace = true, features = ["generate", "jwt-convert"] }
mockito = { workspace = true }
criterion = { version = "0.8.2", features = ["async_tokio"] }
tokio = { workspace = true, features = ["rt-multi-thread"] }
stats_alloc = "0.1.10"
tempfile = "3.8"
tokio-stream = "0.1.18"

[target.'cfg(not(any(target_arch = "wasm32", target_os = "windows")))'.dev-dependencies]
pprof = { version = "0.15.0", features = ["flamegraph"] }

[build-dependencies]
chrono = { workspace = true }
tonic-prost-build = { version = "0.14.3", optional = true }

[package.metadata.cargo-machete]
ignored = ["getrandom_02", "prost", "tonic-prost", "tonic-prost-build"]

[lints]
workspace = true

[[bench]]
name = "authz_authorize_unsigned_benchmark"
harness = false

[[bench]]
name = "startup_benchmark"
harness = false

[[bench]]
name = "authz_authorize_multi_issuer_benchmark"
harness = false

[[bench]]
name = "policy_store_benchmark"
harness = false

[[bench]]
name = "context_data_store_benchmark"
harness = false

[[bench]]
name = "authz_authorize_batch_benchmark"
harness = false