gotcha 0.4.0

Enhanced web framework built on top of Axum with OpenAPI, metrics, and configuration management
Documentation
[package]
name = "gotcha"
description = "Enhanced web framework built on top of Axum with OpenAPI, metrics, and configuration management"
edition = "2021"
version = "0.4.0"
license = "MIT"
repository = "https://github.com/Kilerd/gotcha/"
# Symlinked to the repository README so the crate documentation and the landing page are the same
# file. The symlink also makes `include_str!("../README.md")` resolve both in the workspace and in
# the packaged crate, where cargo places the README at the package root.
readme = "README.md"

# docs.rs builds with every feature, so the OpenAPI layer and the rest of the optional surface
# actually appear; `docsrs` turns on the per-item "requires feature X" badges.
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lib]
doctest = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
default = ["http1"]
http1 = ["axum/http1", "axum/tokio"]
prometheus = ["dep:axum-prometheus"]
openapi = ["dep:oas", "dep:gotcha_core", "gotcha_core/axum"]
# These enable only their own half of `tower-http`. That matters: `tower-http/cors` has no
# dependencies at all, while `tower-http/fs` pulls in mime_guess, httpdate, percent-encoding and a
# dozen more, so a CORS-only application should not pay for the static file machinery.
cors = ["dep:tower-http", "tower-http/cors"]
static_files = ["dep:tower-http", "tower-http/fs"]
task = ["dep:cron", "tokio/time"]


[dependencies]
async-trait = "0.1.60"
gotcha_macro = { version = "0.4", path = "../gotcha_macro" }
gotcha_core = { version = "0.4", path = "../gotcha_core", optional = true }
serde = {version = "1", features = ["derive"]}
# `rt` is needed by the message system, which is always available (it gated nothing but a
# 160-line module and this one tokio feature).
tokio = {version = "1", features = ["rt"]}
tracing = "0.1"
tracing-subscriber = {version="0.3", features=["env-filter"]}
log = "0.4"
cron = {version = "0.12.0", optional = true}
chrono = "0.4.23"
oas = { version = "0.1", optional = true }
mofa = "0.2"
axum = { version = "0.8", default-features = false, features = ["form", "json", "query", "multipart", "ws", "matched-path", "original-uri"] }
# For `TypedHeader<T>`: axum 0.7 moved it out of axum proper. Only the `typed-header` feature is
# enabled, which brings in the `headers` crate and nothing else.
axum-extra = { version = "0.10", default-features = false, features = ["typed-header"] }
tower-layer = "0.3.2"
tower-service = "0.3.2"
inventory = "0.3.15"
either = "1.13.0"
convert_case = "0.6.0"
once_cell = "1"
axum-prometheus = { version = "0.8", optional = true }
axum-macros = "0.5"
# No features here — the `cors` / `static_files` flags each turn on the one they need.
tower-http = { version = "0.6", optional = true, default-features = false }
cfg-if = { workspace = true }
thiserror = "1.0"
serde_json = "1"    
bigdecimal = "0.4"
rust_decimal = "1.36"
uuid = {version =  "1.10" }
regex = "1.7"
validator = { version = "0.20", features = ["derive"] }

[dev-dependencies]
trybuild = "1.0"
assert-json-diff = "2"
# Non-optional so trybuild-generated test crates (which derive Schematic and thus
# emit `::gotcha_core::` paths) have gotcha_core in their extern prelude.
gotcha_core = { version = "0.4", path = "../gotcha_core" }
# So `#[tokio::main]` doc examples compile (the lib's own tokio dep is minimal).
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
futures-core = "0.3.33"
futures-util = "0.3.33"
tower = "0.5.3"