[package]
name = "sdforge"
version.workspace = true
edition.workspace = true
description = "Multi-protocol SDK framework with unified macro configuration"
license.workspace = true
repository.workspace = true
keywords.workspace = true
categories.workspace = true
authors.workspace = true
documentation = "https://docs.rs/sdforge"
[lib]
path = "lib.rs"
[dependencies]
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
thiserror = { workspace = true }
inventory = { version = "0.3", optional = true }
sdforge-macros = { version = "0.1.0", path = "../macros" }
async-trait = { version = "0.1", optional = true }
axum = { version = "0.8.8", optional = true, features = ["ws"] }
tower = { version = "0.5", optional = true }
tower-http = { version = "0.6.3", features = ["cors", "limit", "timeout", "set-header", "compression-gzip", "compression-deflate"], optional = true }
mcp-sdk = { version = "0.0.3", optional = true }
anyhow = { version = "1.0", optional = true }
tokio-stream = { version = "0.1", optional = true }
tokio = { version = "1.41", optional = true, features = ["sync"] }
futures-util = { version = "0.3", optional = true }
tokio-tungstenite = { version = "0.23", optional = true }
axum-extra = { version = "0.9", features = ["typed-header"], optional = true }
tonic = { version = "0.12", optional = true }
prost = { version = "0.13", optional = true }
tonic-build = { version = "0.12", optional = true }
chrono = { version = "0.4", optional = true, features = ["serde"] }
tracing = { version = "0.1", optional = true }
tracing-subscriber = { version = "0.3", optional = true }
tracing-appender = { version = "0.2", optional = true }
validator = { version = "0.18", features = ["derive"], optional = true }
regex = { version = "1.10", optional = true }
once_cell = { version = "1.20", optional = true }
dashmap = { version = "5.5", optional = true }
uuid = { version = "1.0", features = ["v4"], optional = true }
hmac = { version = "0.12", optional = true }
sha2 = { version = "0.10", optional = true }
secrets = { version = "1.2", optional = true }
zeroize = { version = "1.5", optional = true }
subtle = { version = "2.5", optional = true }
toml = { version = "0.9", optional = true }
notify = { version = "7.0", optional = true }
cached = { version = "0.49", optional = true }
cached_proc_macro = { version = "0.23", optional = true }
redis = { version = "1.0", optional = true }
bytes = { version = "1.0", optional = true }
clap = { version = "4.5", features = ["derive"], optional = true }
tera = { version = "1.19", optional = true }
walkdir = { version = "2.5", optional = true }
[dev-dependencies]
tokio = { version = "1.41", features = ["rt", "rt-multi-thread", "macros"] }
once_cell = "1.20"
sdforge-macros = { version = "0.1.0", path = "../macros" }
http = "1.0"
tempfile = "3.10"
axum-test = "16.4"
reqwest = { version = "0.12", features = ["json"] }
criterion = "0.5"
trybuild = "1.0"
proptest = "1.4"
[features]
default = ["http"]
http = [
"dep:axum",
"dep:tower",
"dep:tower-http",
"dep:inventory",
"dep:chrono",
"dep:validator",
"dep:regex",
"dep:dashmap",
"dep:uuid",
"dep:toml",
"dep:once_cell",
"dep:notify",
"dep:tokio",
"dep:axum-extra",
]
mcp = ["dep:mcp-sdk", "dep:inventory", "dep:anyhow"]
streaming = ["http", "dep:tokio-stream", "dep:tokio", "dep:futures-util"]
timestamp = ["dep:chrono"]
logging = ["dep:tracing", "dep:tracing-subscriber", "dep:tracing-appender", "tracing-subscriber/env-filter"]
security = ["http", "dep:dashmap", "dep:uuid", "dep:hmac", "dep:sha2", "dep:chrono", "dep:tokio", "dep:secrets", "dep:zeroize", "dep:subtle", "dep:once_cell"]
hot-reload = ["http", "dep:notify"]
websocket = ["http", "streaming", "dep:tokio-tungstenite", "dep:axum-extra", "dep:async-trait"]
grpc = ["http", "dep:tonic", "dep:prost", "dep:tonic-build"]
cache = ["http", "dep:cached", "dep:sha2", "dep:futures-util", "dep:cached_proc_macro", "dep:bytes"]
cache-redis = ["cache", "dep:redis"]
cli = [
"dep:clap",
"dep:anyhow",
"dep:tera",
"dep:walkdir",
"dep:tracing",
"dep:tracing-subscriber",
]
full = ["http", "mcp", "streaming", "timestamp", "logging", "security", "hot-reload", "cache", "websocket", "grpc"]
[build-dependencies]
tonic-build = { version = "0.12" }
[package.metadata.docs.rs]
all-features = true
[[bin]]
name = "sdforge"
path = "main.rs"
[[bench]]
name = "axiom_bench"
path = "benches/sdforge_bench.rs"
harness = false