[package]
name = "effectful"
version = "0.2.0"
edition = "2024"
description = "Effect<A, E, R> (sync + async), context/layers, pipe — interpreter-style, no bundled executor"
license = "CC-BY-SA-4.0"
repository = "https://github.com/EduSantosBrito/effectful"

# Examples: numbered curriculum `examples/NNN_slug.rs` (auto-discovered). Tokio integration:
# `effectful_tokio` (`106_tokio_runtime` … `109_tokio_end_to_end`). See `examples/README.md`.

[lints.rust]
unsafe_code = "forbid"
unexpected_cfgs = { level = "warn", check-cfg = [
  'cfg(coverage)',
  'cfg(feature, values("mock"))',
] }

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

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

[features]
# `serde_json::Value` ↔ [`crate::schema::Unknown`], JSON Schema helpers for primitives.
schema-serde = ["dep:serde_json"]

[dependencies]
futures = { version = "0.3", default-features = false, features = ["std"] }
effectful_macro = { path = "../effectful_macro", version = "0.2.0" }
effectful_proc_macro = { path = "../effectful_proc_macro", version = "0.2.0" }
flume = "0.12"
im = "15"
# 0.2.0 lacks APIs we use (`SignedDuration::from_nanos_i128`, `Error::from_args`).
jiff = "0.2.23"
serde_json = { version = "1", optional = true }
tokio = { version = "1.50.0", features = ["macros", "rt", "time", "sync"] }

[dev-dependencies]
criterion = "0.8.2"
pollster = "0.4"
proptest = "1"
rstest = "0.26"
tokio = { version = "1.50.0", features = [
  "macros",
  "rt",
  "rt-multi-thread",
  "sync",
  "time",
] }
