[workspace]
members = ["."]
resolver = "2"
[workspace.package]
version = "0.3.1"
edition = "2021"
authors = ["Kirky.X"]
license = "MIT"
repository = "https://github.com/Kirky-X/sdforge"
[workspace.dependencies]
serde = { version = "~1.0", default-features = false, features = ["std", "derive"] }
serde_json = { version = "~1.0", default-features = false, features = ["std"] }
thiserror = { version = "~2.0", default-features = false }
log = { version = "~0.4", default-features = false, features = ["std"] }
proc-macro2 = { version = "~1.0", default-features = false, features = ["proc-macro"] }
syn = { version = "~2.0", default-features = false, features = ["full", "extra-traits", "parsing", "printing", "clone-impls", "proc-macro"] }
quote = { version = "~1.0", default-features = false, features = ["proc-macro"] }
axum = { version = "~0.8.9", default-features = false, features = ["http1", "json", "form", "matched-path", "original-uri", "query", "tokio", "tower-log", "tracing", "ws"] }
tower = { version = "~0.5", default-features = false, features = ["log", "util", "timeout", "limit", "load-shed", "retry"] }
tower-http = { version = "~0.7", default-features = false, features = ["cors", "limit", "timeout", "set-header", "compression-gzip", "compression-deflate"] }
inventory = { version = "~0.3", default-features = false }
tokio = { version = "~1.52", default-features = false, features = ["rt-multi-thread", "macros", "sync", "time", "net"] }
futures-util = { version = "~0.3", default-features = false, features = ["std", "async-await", "async-await-macro"] }
tokio-stream = { version = "~0.1", default-features = false }
uuid = { version = "~1.23", default-features = false, features = ["std", "v4"] }
chrono = { version = "~0.4", default-features = false, features = ["std", "serde", "clock"] }
regex = { version = "~1.12", default-features = false, features = ["std", "perf"] }
validator = { version = "~0.20", default-features = false, features = ["derive"] }
once_cell = { version = "~1.21", default-features = false, features = ["std"] }
hmac = { version = "~0.13", default-features = false }
sha2 = { version = "~0.11", default-features = false }
subtle = { version = "~2.6", default-features = false }
rand = { version = "~0.10", default-features = false, features = ["std", "std_rng"] }
hex = { version = "~0.4", default-features = false, features = ["alloc"] }
base64 = { version = "~0.22", default-features = false, features = ["std", "alloc"] }
toml = { version = "~1.1", default-features = false, features = ["parse", "display"] }
oxcache = { version = "0.3.2", default-features = false, features = ["minimal"] }
http = { version = "~1.4", default-features = false, features = ["std"] }
bincode = { version = "~2.0", default-features = false, features = ["std", "serde"] }
axum-extra = { version = "~0.12", default-features = false, features = ["typed-header"] }
tonic = { version = "~0.14", default-features = false, features = ["transport", "codegen", "router"] }
prost = { version = "~0.14", default-features = false, features = ["derive"] }
tonic-prost = { version = "~0.14", default-features = false }
limiteron = { version = "~0.2", default-features = false }
utoipa = { version = "~5.5", default-features = false, features = ["macros"] }
clap = { version = "~4.6", default-features = false, features = ["std", "derive", "help", "usage", "error-context", "suggestions", "string"] }
utoipa-swagger-ui = { version = "~8.0", default-features = false, features = ["axum"] }
clap-markdown = { version = "~0.1", default-features = false }
url = { version = "~2.5", default-features = false }
simd-json = { version = "~0.17", default-features = false, features = ["serde_impl"] }
tempfile = { version = "~3.27", default-features = false }
serial_test = { version = "~3.5", default-features = false }
axum-test = { version = "~21", default-features = false, features = ["ws"] }
reqwest = { version = "~0.13", default-features = false, features = ["json"] }
criterion = { version = "~0.8", default-features = false }
trybuild = { version = "~1.0", default-features = false }
proptest = { version = "~1.11", default-features = false, features = ["std", "alloc", "bit-set"] }
pretty_assertions = { version = "~1.4", default-features = false, features = ["std"] }
[package]
name = "sdforge"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
keywords = ["api", "http", "mcp", "macro", "framework"]
categories = ["web-programming", "development-tools"]
description = "Multi-protocol SDK framework with unified macro configuration"
documentation = "https://docs.rs/sdforge"
[lib]
path = "src/lib.rs"
[[example]]
name = "perf_regex_cache"
required-features = ["cache"]
[[example]]
name = "perf_lru_eviction"
required-features = ["cache"]
[[example]]
name = "perf_prefix_index"
required-features = ["cache"]
[[example]]
name = "perf_batch_ops"
required-features = ["cache"]
[[example]]
name = "basic_cli"
required-features = ["cli"]
[[example]]
name = "swagger_demo"
required-features = ["docs"]
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
log = { workspace = true }
sdforge-macros = { version = "0.3.0", path = "./macros" }
axum = { workspace = true, optional = true }
tower = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
inventory = { workspace = true, optional = true }
tokio = { workspace = true, optional = true }
axum-extra = { workspace = true, optional = true, features = ["typed-header"] }
rmcp = { version = "~2.1", optional = true, default-features = false, features = ["server"] }
anyhow = { version = "1.0", optional = true, default-features = false, features = ["std"] }
tokio-stream = { workspace = true, optional = true }
futures-util = { workspace = true, optional = true }
tonic = { workspace = true, optional = true }
prost = { workspace = true, optional = true }
tonic-prost = { workspace = true, optional = true }
utoipa = { workspace = true, optional = true }
clap = { workspace = true, optional = true }
utoipa-swagger-ui = { workspace = true, optional = true }
clap-markdown = { workspace = true, optional = true }
chrono = { workspace = true, optional = true }
validator = { workspace = true, optional = true }
regex = { workspace = true, optional = true }
once_cell = { workspace = true, optional = true }
uuid = { workspace = true, optional = true }
hmac = { workspace = true, optional = true }
sha2 = { workspace = true, optional = true }
subtle = { workspace = true, optional = true }
rand = { workspace = true, optional = true }
hex = { workspace = true, optional = true }
base64 = { workspace = true, optional = true }
toml = { workspace = true, optional = true }
oxcache = { workspace = true, optional = true }
http = { workspace = true, optional = true }
bincode = { workspace = true, optional = true }
simd-json = { workspace = true, optional = true }
limiteron = { workspace = true, optional = true }
[dev-dependencies]
tokio = { workspace = true, features = ["test-util"] }
tokio-stream = { workspace = true }
once_cell = { workspace = true }
sdforge-macros = { version = "0.3.1", path = "./macros", default-features = false }
tempfile = { workspace = true }
serial_test = { workspace = true }
axum-test = { workspace = true }
reqwest = { workspace = true }
criterion = { workspace = true }
trybuild = { workspace = true }
proptest = { workspace = true }
url = { workspace = true }
[features]
default = ["http"]
http = [
"axum",
"tower",
"tower-http",
"inventory",
"tokio",
"axum-extra",
"toml",
"regex",
"once_cell",
"validator",
"uuid",
]
mcp = ["rmcp", "inventory", "anyhow", "dep:http"]
streaming = ["http", "tokio-stream", "futures-util", "chrono"]
timestamp = ["chrono"]
ratelimit = [
"http",
"dep:limiteron",
"limiteron/tower-middleware",
"limiteron/ban-manager",
"limiteron/quota-control",
"limiteron/circuit-breaker",
]
security = [
"http",
"uuid",
"hmac",
"sha2",
"chrono",
"tokio",
"subtle",
"once_cell",
"rand",
"regex",
"oxcache/minimal",
"bincode",
"cache",
"hex",
"base64",
"ratelimit",
]
websocket = ["http", "streaming", "axum-extra", "chrono"]
grpc = ["http", "tonic", "prost", "tonic-prost"]
openapi = ["utoipa", "http"]
cli = ["http", "dep:clap"]
docs = ["openapi", "dep:utoipa-swagger-ui", "dep:clap-markdown", "cli"]
cache = ["dep:http", "oxcache/minimal"]
logging = ["chrono", "tokio"]
simd-json = ["dep:simd-json"]
full = [
"http",
"mcp",
"streaming",
"timestamp",
"security",
"cache",
"websocket",
"grpc",
"logging",
"openapi",
"cli",
"docs",
]
hex = ["dep:hex"]
[build-dependencies]
tonic-build = { version = "0.14", default-features = false }
tonic-prost-build = { version = "0.14", default-features = false }
[package.metadata.docs.rs]
all-features = true
[[bench]]
name = "axiom_bench"
path = "src/benches/sdforge_bench.rs"
harness = false
[[test]]
name = "cache_tests"
path = "tests/integration/cache_tests.rs"
[[test]]
name = "feature_combinations"
path = "tests/integration/feature_combinations.rs"
[[test]]
name = "grpc_tests"
path = "tests/integration/grpc_tests.rs"
[[test]]
name = "http_integration"
path = "tests/integration/http_integration.rs"
[[test]]
name = "mcp_integration"
path = "tests/integration/mcp_integration.rs"
[[test]]
name = "mcp_protocol_tests"
path = "tests/integration/mcp_protocol_tests.rs"
[[test]]
name = "security_headers_tests"
path = "tests/integration/security_headers_tests.rs"
[[test]]
name = "security_middleware_tests"
path = "tests/integration/security_middleware_tests.rs"
[[test]]
name = "security_tests"
path = "tests/integration/security_tests.rs"
[[test]]
name = "streaming_tests"
path = "tests/integration/streaming_tests.rs"
[[test]]
name = "uat_tests"
path = "tests/integration/uat_tests.rs"
[[test]]
name = "websocket_integration_tests"
path = "tests/integration/websocket_integration_tests.rs"
[[test]]
name = "websocket_tests"
path = "tests/integration/websocket_tests.rs"
[[test]]
name = "integration_http_mcp"
path = "tests/integration_http_mcp.rs"
[[test]]
name = "http_tests"
path = "tests/integration/http_tests.rs"
[[test]]
name = "config_tests"
path = "tests/unit/config_tests.rs"
[[test]]
name = "core_tests"
path = "tests/unit/core_tests.rs"
[[test]]
name = "edge_case_tests"
path = "tests/unit/edge_case_tests.rs"
[[test]]
name = "http_version_routing_tests"
path = "tests/unit/http_version_routing_tests.rs"
[[test]]
name = "mcp_tool_instance_tests"
path = "tests/unit/mcp_tool_instance_tests.rs"
[[test]]
name = "error_handling_tests"
path = "tests/integration/error_handling_tests.rs"
[[test]]
name = "openapi_tests"
path = "tests/integration/openapi_tests.rs"
required-features = ["http", "openapi"]
[[test]]
name = "cli_tests"
path = "tests/integration/cli_tests.rs"
required-features = ["cli"]
[[test]]
name = "docs_tests"
path = "tests/integration/docs_tests.rs"
required-features = ["docs"]
[[test]]
name = "macro_tests"
path = "tests/macros/macro_tests.rs"
[profile.release]
lto = true
codegen-units = 1
opt-level = "z"
[profile.dev]
debug = true
[profile.dev.package."*"]
opt-level = 2