Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Флаги возможностей

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)

Веб-транспорты

ФлагЧто включаетДоп. зависимости
axumIntoResponse для AppError и ProblemJson с JSON-телами по RFC 7807; AppErrorKind::status_code()axum (json, multipart), serde_json
actixActix Web ResponseError для AppError и Responder для ProblemJsonactix-web
multipartОтображает axum::extract::multipart::MultipartErrorBadRequest (подразумевает axum)через axum
openapiutoipa::ToSchema для ErrorResponse и AppCode, чтобы полезные нагрузки ошибок попадали в спецификации OpenAPIutoipa
serde_jsonСтруктурированные JSON-details в AppError/ErrorResponse/ProblemJson; FieldValue::Json и field::jsonserde_json
tonicКонверсия ошибок в tonic::Status с санитизированными метаданными; экспортирует StatusConversionErrortonic

Телеметрия и наблюдаемость

ФлагЧто включаетДоп. зависимости
tracingСтруктурированные события tracing, эмитируемые при создании ошибокtracing, log, log-mdc
metricsИнкремент счётчика error_total{code,category} для каждого AppErrormetrics
backtraceЛенивый захват std::backtrace::Backtrace (учитывает RUST_BACKTRACE), билдер with_backtrace()
coloredЦветной многострочный вывод в терминале с автоматическим определением TTY; более насыщенный Display для AppErrorowo-colors

Асинхронные интеграции и ввод/вывод

Каждый флаг интеграции добавляет конверсию From<...> for AppError, классифицирующую ошибку библиотеки в рамках таксономии:

ФлагКонверсияДоп. зависимости
sqlxsqlx_core::ErrorNotFound / Database (компактный sqlx-core, без драйверов и TLS)sqlx-core
sqlx-migratesqlx::migrate::MigrateErrorDatabase (полный sqlx только с функцией migrate)sqlx
redisredis::RedisErrorCacheredis
reqwestreqwest::ErrorTimeout / Network / ExternalApireqwest
tokiotokio::time::error::ElapsedTimeouttokio (time)
validatorvalidator::ValidationErrorsValidationvalidator
configconfig::ConfigErrorConfigconfig

sqlx и sqlx-migrate разделены намеренно: для классификации ошибок достаточно sqlx-core, тогда как отображение ошибок миграций тянет полный крейт sqlx.

Обмен сообщениями и боты

ФлагКонверсияДоп. зависимости
teloxideteloxide_core::RequestErrorRateLimited / Network / ExternalApi / Deserialization / Internalteloxide-core
init-datainit_data_rs::InitDataErrorTelegramAuth (валидация 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::ErrorInternal
StringBadRequest

Рецепты

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