[package]
name = "mockforge-graphql"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "GraphQL protocol support for MockForge"
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
keywords = ["graphql", "api", "mock", "testing", "schema"]
categories = ["development-tools::testing", "web-programming"]

[lints.rust]
missing_docs = "deny"

[dependencies]
# GraphQL implementation - simplified for basic functionality
async-graphql = { version = "7.0", features = ["apollo_tracing"] }
async-graphql-axum = "7.0"
# Streams for the Subscription root (`tick` emits a stream of ints).
futures = { workspace = true }
async-stream = "0.3"

# Workspace dependencies
tokio = { workspace = true }
axum = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true }
anyhow = { workspace = true }
thiserror = { workspace = true }
regex = { workspace = true }
once_cell = { workspace = true }
base64 = { workspace = true }
reqwest = { workspace = true }
async-trait = { workspace = true }
rand = { workspace = true }
indexmap = "2.2"
notify = "7.0"
parking_lot = { workspace = true }

# MockForge core
mockforge-core = { version = "0.3.70", path = "../mockforge-core" }
mockforge-foundation = { version = "0.3.123", path = "../mockforge-foundation" }
mockforge-openapi = { version = "0.3.123", path = "../mockforge-openapi" }
mockforge-observability = { version = "0.3.70", path = "../mockforge-observability" }
mockforge-tracing = { version = "0.3.70", path = "../mockforge-tracing" }
opentelemetry = { version = "0.22", features = ["trace"] }

# Optional data generation support
mockforge-data = { version = "0.3.70", path = "../mockforge-data", optional = true }

[features]
default = ["data-faker"]
data-faker = ["mockforge-data"]

[dev-dependencies]
tokio = { version = "1.49", features = ["macros", "rt-multi-thread"] }
tower = { workspace = true }
opentelemetry_sdk = "0.22"
tempfile = "3.8"
# Real GraphQL-over-WebSocket client for the subscriptions e2e test.
tokio-tungstenite = "0.24"
reqwest = { workspace = true, features = ["json"] }
futures = { workspace = true }
url = "2"
