diff --git a/README.md b/README.md index 80ffc88..50a1d0c 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ ![License](https://img.shields.io/badge/License-MIT%20or%20Apache--2.0-informational) [![CI](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml?query=branch%3Amain) +> πŸ‡·πŸ‡Ί Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ README Π½Π° [русском языкС](README.ru.md). + Small, pragmatic error model for API-heavy Rust services. Core is framework-agnostic; integrations are opt-in via feature flags. Stable categories, conservative HTTP mapping, no `unsafe`. @@ -327,4 +329,3 @@ MSRV = 1.89 (may raise in minor, never in patch). Apache-2.0 OR MIT, at your option. - diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..416a896 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,78 @@ +# masterror Β· ΠšΠ°Ρ€ΠΊΠ°Ρ-нСзависимыС Ρ‚ΠΈΠΏΡ‹ ошибок ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ + +> Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β€” русская вСрсия основной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠΠ½Π³Π»ΠΈΠΉΡΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ см. Π² [README.md](README.md). + +[![Crates.io](https://img.shields.io/crates/v/masterror)](https://crates.io/crates/masterror) +[![docs.rs](https://img.shields.io/docsrs/masterror)](https://docs.rs/masterror) +[![Downloads](https://img.shields.io/crates/d/masterror)](https://crates.io/crates/masterror) +![MSRV](https://img.shields.io/badge/MSRV-1.89-blue) +![License](https://img.shields.io/badge/License-MIT%20or%20Apache--2.0-informational) +[![CI](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml?query=branch%3Amain) + +НСбольшая прагматичная модСль ошибок для Rust-сСрвисов с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΌ API. Основной ΠΊΡ€Π΅ΠΉΡ‚ Π½Π΅ зависит ΠΎΡ‚ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΈΡ‡ΠΈ. Ваксономия ошибок ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°, соотвСтствиС HTTP-ΠΊΠΎΠ΄Π°ΠΌ консСрвативно, `unsafe` Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½. + +## ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности + +- Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹: `AppError`, `AppErrorKind`, `AppResult`, `AppCode`, `ErrorResponse`. +- АдаптСры для Axum ΠΈ Actix (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ). +- ГСнСрация схСм OpenAPI Ρ‡Π΅Ρ€Π΅Π· `utoipa`. +- ΠšΠΎΠ½Π²Π΅Ρ€ΡΠΈΠΈ ΠΈΠ· распространённых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (`sqlx`, `reqwest`, `redis`, `validator`, `config`, `tokio` ΠΈ Π΄Ρ€.). +- Π“ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€Π΅Π»ΡŽΠ΄ΠΈΡ-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ€Π΅ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вострСбованныС Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚Ρ€Π΅ΠΉΡ‚Ρ‹. + +## Установка + +Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² `Cargo.toml`: + +~~~toml +[dependencies] +masterror = { version = "0.5.0", default-features = false } +# ΠΈΠ»ΠΈ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ интСграциями +# masterror = { version = "0.5.0", features = [ +# "axum", "actix", "openapi", "serde_json", +# "sqlx", "reqwest", "redis", "validator", +# "config", "tokio", "multipart", "teloxide", +# "telegram-webapp-sdk", "frontend", "turnkey" +# ] } +~~~ + +**MSRV:** 1.89 + +## Быстрый старт + +Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ошибки Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ: + +~~~rust +use masterror::{AppError, AppErrorKind}; + +let err = AppError::new(AppErrorKind::BadRequest, "Π€Π»Π°Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн"); +assert!(matches!(err.kind, AppErrorKind::BadRequest)); +~~~ + +ИспользованиС ΠΏΡ€Π΅Π»ΡŽΠ΄ΠΈΠΈ: + +~~~rust +use masterror::prelude::*; + +fn do_work(flag: bool) -> AppResult<()> { + if !flag { + return Err(AppError::bad_request("Π€Π»Π°Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн")); + } + Ok(()) +} +~~~ + +## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ + +- `sqlx` β€” классификация `sqlx::Error` ΠΏΠΎ Π²ΠΈΠ΄Π°ΠΌ ошибок. +- `reqwest` β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ сСтСвых/HTTP-сбоСв Π² Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. +- `redis` β€” коррСктная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок кСша. +- `validator` β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ `ValidationErrors` Π² Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ошибки API. +- `config` β€” Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ошибки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. +- `tokio` β€” ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² (`tokio::time::error::Elapsed`). +- `multipart` β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок извлСчСния multipart Π² Axum. +- `frontend` β€” Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² `JsValue` для WASM. +- `turnkey` β€” Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ таксономии для Turnkey SDK. + +## ЛицСнзия + +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ распространяСтся ΠΏΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Apache-2.0 ΠΈΠ»ΠΈ MIT Π½Π° ваш Π²Ρ‹Π±ΠΎΡ€. diff --git a/README.template.md b/README.template.md index 62215a8..074c8fc 100644 --- a/README.template.md +++ b/README.template.md @@ -10,6 +10,8 @@ ![License](https://img.shields.io/badge/License-MIT%20or%20Apache--2.0-informational) [![CI](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/RAprogramm/masterror/actions/workflows/ci.yml?query=branch%3Amain) +> πŸ‡·πŸ‡Ί Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ README Π½Π° [русском языкС](README.ru.md). + Small, pragmatic error model for API-heavy Rust services. Core is framework-agnostic; integrations are opt-in via feature flags. Stable categories, conservative HTTP mapping, no `unsafe`.