Флаги возможностей
masterror держит сборку по умолчанию компактной: из коробки включена только функция std. Всё остальное — веб-транспорты, телеметрия, интеграции с библиотеками — подключается опционально. Эта страница — полный справочник по каждому флагу, объявленному в Cargo.toml.
[dependencies]
masterror = { version = "0.28", default-features = false }
# or with features:
# masterror = { version = "0.28", features = [
# "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"
# ] }
Ядро
| Флаг | Что включает | Доп. зависимости |
|---|---|---|
std (по умолчанию) | Поддержка стандартной библиотеки; требуется всем runtime-интеграциям. Отключите для no_std (см. Без std) | — |
Веб-транспорты
| Флаг | Что включает | Доп. зависимости |
|---|---|---|
axum | IntoResponse для AppError и ProblemJson с JSON-телами по RFC 7807; AppErrorKind::status_code() | axum (json, multipart), serde_json |
actix | Actix Web ResponseError для AppError и Responder для ProblemJson | actix-web |
multipart | Отображает axum::extract::multipart::MultipartError → BadRequest (подразумевает axum) | через axum |
openapi | utoipa::ToSchema для ErrorResponse и AppCode, чтобы полезные нагрузки ошибок попадали в спецификации OpenAPI | utoipa |
serde_json | Структурированные JSON-details в AppError/ErrorResponse/ProblemJson; FieldValue::Json и field::json | serde_json |
tonic | Конверсия ошибок в tonic::Status с санитизированными метаданными; экспортирует StatusConversionError | tonic |
Телеметрия и наблюдаемость
| Флаг | Что включает | Доп. зависимости |
|---|---|---|
tracing | Структурированные события tracing, эмитируемые при создании ошибок | tracing, log, log-mdc |
metrics | Инкремент счётчика error_total{code,category} для каждого AppError | metrics |
backtrace | Ленивый захват std::backtrace::Backtrace (учитывает RUST_BACKTRACE), билдер with_backtrace() | — |
colored | Цветной многострочный вывод в терминале с автоматическим определением TTY; более насыщенный Display для AppError | owo-colors |
Асинхронные интеграции и ввод/вывод
Каждый флаг интеграции добавляет конверсию From<...> for AppError, классифицирующую ошибку библиотеки в рамках таксономии:
| Флаг | Конверсия | Доп. зависимости |
|---|---|---|
sqlx | sqlx_core::Error → NotFound / Database (компактный sqlx-core, без драйверов и TLS) | sqlx-core |
sqlx-migrate | sqlx::migrate::MigrateError → Database (полный sqlx только с функцией migrate) | sqlx |
redis | redis::RedisError → Cache | redis |
reqwest | reqwest::Error → Timeout / Network / ExternalApi | reqwest |
tokio | tokio::time::error::Elapsed → Timeout | tokio (time) |
validator | validator::ValidationErrors → Validation | validator |
config | config::ConfigError → Config | config |
sqlx и sqlx-migrate разделены намеренно: для классификации ошибок достаточно sqlx-core, тогда как отображение ошибок миграций тянет полный крейт sqlx.
Обмен сообщениями и боты
| Флаг | Конверсия | Доп. зависимости |
|---|---|---|
teloxide | teloxide_core::RequestError → RateLimited / Network / ExternalApi / Deserialization / Internal | teloxide-core |
init-data | init_data_rs::InitDataError → TelegramAuth (валидация init data Telegram Mini Apps) | init-data-rs |
Фронтенд и домен
| Флаг | Что включает | Доп. зависимости |
|---|---|---|
frontend | Модуль frontend: конверсия ошибок в wasm_bindgen::JsValue и логирование через console.error в контекстах WASM/браузера | wasm-bindgen, js-sys, serde-wasm-bindgen |
turnkey | Модуль turnkey: TurnkeyErrorKind, TurnkeyError, classify_turnkey_error и конверсии в AppError | — |
benchmarks | Набор бенчмарков Criterion и инструментарий базовых линий CI (только для локального профилирования) | — |
Базовые конверсии (доступны всегда)
Без каких-либо флагов возможностей AppError уже конвертируется из:
| Источник | Целевой вид |
|---|---|
std::io::Error | Internal |
String | BadRequest |
Рецепты
REST API на Axum с problem+json, документацией OpenAPI и tracing:
masterror = { version = "0.28", features = ["axum", "openapi", "serde_json", "tracing"] }
Сервис с базой данных на sqlx, миграциями и метриками:
masterror = { version = "0.28", features = ["sqlx", "sqlx-migrate", "metrics", "tracing"] }
gRPC-сервис:
masterror = { version = "0.28", features = ["tonic", "tracing", "backtrace"] }
Telegram-бот с аутентификацией Mini App:
masterror = { version = "0.28", features = ["teloxide", "init-data", "reqwest", "tokio"] }
WASM-фронтенд:
masterror = { version = "0.28", features = ["frontend", "serde_json"] }
no_std для встраиваемых систем или библиотек:
masterror = { version = "0.28", default-features = false }
Примечания
- Все флаги интеграций подразумевают
std, кромеsqlxиsqlx-migrate, которые на уровне флага остаются независимыми отstd. axumиactixподтягиваютserde_jsonтранзитивно, потому что тела их ответов — JSON.- Флаги возможностей никогда не меняют wire-контракт уже включённых полей
ErrorResponse/ProblemJson— они лишь добавляют возможности (например,serde_jsonпревращаетdetailsиз простого текста в структурированный JSON) или реализации трейтов.
См. также: Начало работы · Веб-фреймворки · Интеграции · Наблюдаемость · Без std