# SPDX-FileCopyrightText: 2025-2026 RAprogramm <andrey.rozanov.vl@gmail.com>
# SPDX-License-Identifier: MIT

[package]
name = "entity-derive-impl"
version = "0.19.0"
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
description = "Internal proc-macro implementation for entity-derive. Use entity-derive instead."
license.workspace = true
repository.workspace = true
documentation = "https://docs.rs/entity-derive-impl"
readme = "README.md"
keywords = ["derive", "macro", "entity", "internal"]
categories = ["development-tools::procedural-macro-helpers"]

[lib]
proc-macro = true

[features]
# Default: every entity-attribute generator is on so existing users see no
# regression. Disable selectively via the `entity-derive` facade for
# minimal builds (`default-features = false, features = ["postgres"]`).
default = [
  "events",
  "commands",
  "hooks",
  "transactions",
  "aggregate_root",
  "migrations",
  "projections"
]

# Generates `{Entity}Event` enum and lifecycle event helpers. Required
# transitively by `streams` because the NOTIFY payload uses the event type.
events = []

# Generates command structs, the handler trait, and the dispatcher.
commands = []

# Generates `{Entity}Hooks` trait (currently manual-wiring; see #127 for
# auto-invocation plans).
hooks = []

# Generates `{Entity}TransactionRepo` adapter, the (deprecated) `with_*`
# builder methods, and the `ContextExt` accessor trait.
transactions = []

# Generates `New{Entity}` type and the transactional `save()` method.
aggregate_root = []

# Generates `MIGRATION_UP` / `MIGRATION_DOWN` SQL constants.
migrations = []

# Generates projection structs and `find_by_id_<projection>` methods.
projections = []

[dependencies]
syn = { version = "2", features = ["full", "extra-traits", "parsing"] }
quote = "1"
proc-macro2 = "1"
darling = "0.23"
convert_case = "0.11"
serde = { version = "1", features = ["derive"] }

[dev-dependencies]
trybuild = "1"
uuid = { version = "1", features = ["v4", "v7", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
serde = { version = "1", features = ["derive"] }
async-trait = "0.1"
sqlx = { version = "0.9", features = [
  "runtime-tokio",
  "postgres",
  "uuid",
  "chrono",
] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
utoipa = { version = "5", features = ["chrono", "uuid"] }
validator = { version = "0.20", features = ["derive"] }
entity-core = { path = "../entity-core" }

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
