[package]
name = "cedar-policy-core"
edition.workspace = true
rust-version.workspace = true
build = "build.rs"

version.workspace = true
license.workspace = true
categories.workspace = true
description = "Core implemenation of the Cedar Policy language."
keywords.workspace = true
homepage.workspace = true
repository.workspace = true

[dependencies]
serde = { version = "1.0", features = ["derive", "rc"] }
serde_with = { version = "3.0", features = ["json"] }
serde_json = "1.0"
lalrpop-util = { version = "0.21.0", features = ["lexer"] }
lazy_static = "1.4"
either = "1.8"
itertools = "0.13"
ref-cast = "1.0"
rustc_lexer = "0.1"
thiserror = "1.0"
smol_str = { version = "0.2", features = ["serde"] }
stacker = "0.1.15"
arbitrary = { version = "1", features = ["derive"], optional = true }
miette = { version = "7.1.0", features = ["serde"] }
nonempty = "0.10.0"

# decimal extension requires regex
regex = { version = "1.8", features = ["unicode"], optional = true }

# wasm dependencies
serde-wasm-bindgen = { version = "0.6", optional = true }
tsify = { version = "0.4.5", optional = true }
wasm-bindgen = { version = "0.2.82", optional = true }

[features]
# by default, enable all Cedar extensions
default = ["ipaddr", "decimal"]
ipaddr = []
decimal = ["dep:regex"]

# Enables `Arbitrary` implementations for several types in this crate
arbitrary = ["dep:arbitrary"]

# Expose test utilities
test-util = []

# Experimental features.
partial-eval = []
wasm = ["serde-wasm-bindgen", "tsify", "wasm-bindgen"]

[build-dependencies]
lalrpop = "0.21.0"

[dev-dependencies]
cool_asserts = "2.0"
miette = { version = "7.1.0", features = ["fancy"] }

[lints.rust]
unexpected_cfgs = { level = 'deny', check-cfg = ['cfg(kani)', 'cfg(fuzzing)'] }
