[package]
name = "masterror"
version = "0.26.0"
rust-version = "1.91"
edition = "2024"
license = "MIT"
repository = "https://github.com/RAprogramm/masterror"
readme = "README.md"
description = "Application error types and response mapping"
documentation = "https://docs.rs/masterror"
build = "build.rs"
categories = ["rust-patterns", "web-programming"]
keywords = ["error", "api", "framework"]
include = [
"Cargo.toml",
"Cargo.lock",
"build.rs",
"src/**",
"tests/**",
"README.md",
"README.ru.md",
"README.ko.md",
"README.template.md",
"CHANGELOG.md",
"LICENSE",
"Makefile.toml",
"deny.toml",
"idea.md",
"target.md",
"build/**",
"masterror-derive/**",
"masterror-template/**",
".cargo/audit.toml",
".cargo/config.toml",
]
[workspace]
members = [
"masterror-derive",
"masterror-template",
"examples/axum-rest-api",
"examples/custom-domain-errors",
"examples/sqlx-database",
"examples/basic-async",
]
resolver = "3"
[workspace.package]
edition = "2024"
rust-version = "1.91"
license = "MIT"
repository = "https://github.com/RAprogramm/masterror"
readme = "README.md"
[features]
default = ["std"]
std = ["uuid/std", "serde/std"]
tracing = ["dep:tracing", "dep:log", "dep:log-mdc", "std"]
metrics = ["dep:metrics", "std"]
backtrace = ["std"]
colored = ["dep:owo-colors", "std"]
axum = ["dep:axum", "dep:serde_json", "std"]
actix = ["dep:actix-web", "dep:serde_json", "std"]
sqlx = ["dep:sqlx-core"]
sqlx-migrate = ["dep:sqlx"]
redis = ["dep:redis", "std"]
validator = ["dep:validator", "std"]
serde_json = ["dep:serde_json", "std"]
config = ["dep:config", "std"]
multipart = ["axum", "std"]
tokio = ["dep:tokio", "std"]
reqwest = ["dep:reqwest", "std"]
teloxide = ["dep:teloxide-core", "std"]
init-data = ["dep:init-data-rs", "std"]
frontend = ["dep:wasm-bindgen", "dep:js-sys", "dep:serde-wasm-bindgen", "std"]
turnkey = ["std"]
tonic = ["dep:tonic", "std"]
openapi = ["dep:utoipa", "std"]
benchmarks = ["std"]
[workspace.dependencies]
masterror-derive = { version = "0.10.0" }
masterror-template = { version = "0.3.8" }
[dependencies]
masterror-derive = { version = "0.10" }
masterror-template = { workspace = true }
tracing = { version = "0.1", optional = true, default-features = false, features = [
"attributes",
"std",
] }
log = { version = "0.4", optional = true }
log-mdc = { version = "0.1", optional = true }
metrics = { version = "0.24", optional = true }
serde = { version = "1", default-features = false, features = [
"derive",
"alloc",
] }
serde_json = { version = "1", optional = true, default-features = false, features = [
"std",
] }
http = "1"
sha2 = "0.10"
itoa = "1"
ryu = "1"
axum = { version = "0.8", optional = true, default-features = false, features = [
"json",
"multipart",
] }
actix-web = { version = "4", optional = true, default-features = false, features = [
"macros",
] }
sqlx-core = { version = "0.8", optional = true, default-features = false }
sqlx = { version = "0.8", optional = true, default-features = false, features = [
"migrate",
] }
redis = { version = "0.32", optional = true, default-features = false }
validator = { version = "0.20", optional = true, features = ["derive"] }
config = { version = "0.15", optional = true }
utoipa = { version = "5.4", optional = true }
tokio = { version = "1", optional = true, features = ["time"] }
reqwest = { version = "0.12", optional = true, default-features = false }
teloxide-core = { version = "0.13", optional = true, default-features = false }
init-data-rs = { version = "0.1", optional = true }
wasm-bindgen = { version = "0.2", optional = true }
js-sys = { version = "0.3", optional = true }
serde-wasm-bindgen = { version = "0.6", optional = true }
uuid = { version = "1", default-features = false }
tonic = { version = "0.14", optional = true }
owo-colors = { version = "4", optional = true, default-features = false, features = [
"supports-colors",
] }
[dev-dependencies]
anyhow = { version = "1", default-features = false, features = ["std"] }
criterion = "0.7"
serde_json = "1"
thiserror = "2.0"
tokio = { version = "1", features = [
"macros",
"rt-multi-thread",
"net",
"time",
], default-features = false }
trybuild = "1"
toml = "0.9"
tempfile = "3"
tracing-subscriber = { version = "0.3", features = ["registry"] }
[[bench]]
name = "error_paths"
harness = false
[[bench]]
name = "comparison"
harness = false
[build-dependencies]
serde = { version = "1", features = ["derive"] }
toml = "0.9"
[package.metadata.masterror.readme]
feature_order = [
"std",
"axum",
"actix",
"openapi",
"serde_json",
"tracing",
"metrics",
"backtrace",
"colored",
"sqlx",
"sqlx-migrate",
"reqwest",
"redis",
"validator",
"config",
"tokio",
"multipart",
"teloxide",
"init-data",
"tonic",
"frontend",
"turnkey",
"benchmarks",
]
feature_snippet_group = 4
conversion_lines = [
"`std::io::Error` → Internal",
"`String` → BadRequest",
"`sqlx::Error` → NotFound/Database",
"`redis::RedisError` → Cache",
"`reqwest::Error` → Timeout/Network/ExternalApi",
"`axum::extract::multipart::MultipartError` → BadRequest",
"`validator::ValidationErrors` → Validation",
"`config::ConfigError` → Config",
"`tokio::time::error::Elapsed` → Timeout",
"`teloxide_core::RequestError` → RateLimited/Network/ExternalApi/Deserialization/Internal",
"`init_data_rs::InitDataError` → TelegramAuth",
]
[package.metadata.masterror.readme.features.axum]
description = "IntoResponse integration with structured JSON bodies"
[package.metadata.masterror.readme.features.actix]
description = "Actix Web ResponseError and Responder implementations"
[package.metadata.masterror.readme.features.std]
description = "Enable std support (default); required for runtime integrations"
[package.metadata.masterror.readme.features.openapi]
description = "Generate utoipa OpenAPI schema for ErrorResponse"
[package.metadata.masterror.readme.features.serde_json]
description = "Attach structured JSON details to AppError"
[package.metadata.masterror.readme.features.tracing]
description = "Emit structured tracing events when errors are constructed"
[package.metadata.masterror.readme.features.metrics]
description = "Increment `error_total{code,category}` counter for each AppError"
[package.metadata.masterror.readme.features.backtrace]
description = "Capture lazy `Backtrace` snapshots when telemetry is flushed"
[package.metadata.masterror.readme.features.colored]
description = "Optional colored terminal output with automatic TTY detection"
[package.metadata.masterror.readme.features.sqlx]
description = "Classify sqlx_core::Error variants into AppError kinds"
[package.metadata.masterror.readme.features.sqlx-migrate]
description = "Map sqlx::migrate::MigrateError into AppError (Database)"
[package.metadata.masterror.readme.features.reqwest]
description = "Classify reqwest::Error as timeout/network/external API"
[package.metadata.masterror.readme.features.redis]
description = "Map redis::RedisError into cache-aware AppError"
[package.metadata.masterror.readme.features.validator]
description = "Convert validator::ValidationErrors into validation failures"
[package.metadata.masterror.readme.features.config]
description = "Propagate config::ConfigError as configuration issues"
[package.metadata.masterror.readme.features.multipart]
description = "Handle axum multipart extraction errors"
[package.metadata.masterror.readme.features.tokio]
description = "Classify tokio::time::error::Elapsed as timeout"
[package.metadata.masterror.readme.features.teloxide]
description = "Convert teloxide_core::RequestError into domain errors"
[package.metadata.masterror.readme.features."init-data"]
description = "Convert init-data-rs validation errors for Telegram Mini Apps"
[package.metadata.masterror.readme.features.tonic]
description = "Convert AppError into tonic::Status with redaction"
[package.metadata.masterror.readme.features.frontend]
description = "Log to the browser console and convert to JsValue on WASM"
[package.metadata.masterror.readme.features.turnkey]
description = "Ship Turnkey-specific error taxonomy and conversions"
[package.metadata.masterror.readme.features.benchmarks]
description = "Enable Criterion benchmarks and CI baseline tooling"
extra = ["Primarily used for local profiling and continuous benchmarking runs"]
[lib]
crate-type = ["cdylib", "rlib"]
bench = false