Przejdź do treści
Biblioteka skilli
Programowanie · Budowanie i kod

rust-error-handling

/rust-error-handling

Projektuje obsługę błędów w Rust: thiserror a anyhow, typowane enumy błędów, konwersje #[from] oraz błędy odzyskiwalne a panic.

Repozytorium
agents ↗
Licencja
MIT
Ostatnia zmiana repozytorium
12.10.2026

Ocena i bezpieczeństwo

90/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść25 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
7
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 12.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Projektuje obsługę błędów w Rust: thiserror a anyhow, typowane enumy błędów, konwersje #[from] oraz błędy odzyskiwalne a panic.

Oryginalny opis (EN)

Use when designing Rust error handling — thiserror vs anyhow, typed error enums, #[from] conversions, or recoverable errors vs panics. Not for ownership/borrowing (rust-core-language).

Jak działa

  1. Agent Workflow (MANDATORY)
  2. The rule
  3. Critical Rules
  4. Reference Guide
  5. Validation Checklist
Sekcje z nagłówków SKILL.md, w oryginale · 79 linii, 551 słów
Podgląd SKILL.md
---
name: rust-error-handling
description: Use when designing Rust error handling — thiserror vs anyhow, typed error enums, #[from] conversions, or recoverable errors vs panics. Not for ownership/borrowing (rust-core-language).
versions:
  rust: "1.98.1"
  thiserror: "2"
  anyhow: "1"
references: references/thiserror-libraries.md, references/anyhow-applications.md, references/error-design.md, references/templates/library-error.md, references/templates/application-error.md
related-skills: rust-core-language
---

<objective>
This skill covers the thiserror-for-libraries, anyhow-for-applications split in Rust:
building typed error enums with #[derive(Error)] for library APIs callers can match on,
using anyhow::Result with .context()/.with_context() in application code, and
zero-boilerplate error conversion via #[from].

It also covers the recoverable-errors-vs-panics decision — Result for anything a caller
could reasonably recover from, panic!/unwrap/expect reserved for broken invariants — and
the rule that anyhow::Error must never leak into a library's public API.

Out of scope: general ownership/borrowing design belongs to rust-core-language;
async-runtime-specific error handling is not covered here.
</objective>

# Rust Error Handling

The consensus split: **thiserror for libraries, anyhow for applications.** A library
exposes a typed error its callers can `match`; an application wants one ergonomic error
type and rich context. Getting this boundary right is the whole discipline.

## Agent Workflow (MANDATORY)

1. **fuse-ai-pilot:explore-codebase** — is this crate a library (published API, other
   code depends on it) or a binary/application? That answer picks the tool.
2. **fuse-ai-pilot:research-expert** — confirm current `thiserror` / `anyhow` API
   before writing derives (verification chain: fuse-browser fast-path on
   `docs.rs/thiserror` and `docs.rs/anyhow` → Context7 → Exa).
3. After writing, run **fuse-ai-pilot:sniper** and `cargo clippy`.

## The rule

| Crate kind | Tool | Why |
|------------|------|-----|
| **Library** (others depend on it) | `thiserror` | Typed `enum`, `#[derive(Error)]`, callers can `match` on variants |
| **Application** (binary, top level) | `anyhow` | `anyhow::Result<T>`, `?` everywhere, `.context()` for breadcrumbs |
| **Simple / dep-free** | hand-written `std::error::Error` | No dependency when one or two variants suffice |

## Critical Rules

1. **Never expose `anyhow::Error` in a library's public API.** It erases the type, so
   callers cannot match or handle specific failures. Return a typed `enum` error.
   thiserror is designed to not appear in your public API — switching to/from a
   hand-written impl is not a breaking change.
2. **Applications use `anyhow`; libraries use `thiserror`.** Do not pull `anyhow` into
   a reusable library's signatures.
3. **Add context at each layer** in application code: `.context("...")` /
   `.with_context(|| ...)` turns "No such file or directory" into a traceable chain.
4. **`#[from]` for zero-boilerplate conversion**, so `?` lifts a source error into your
   enum. `#[from]` implies `#[source]` — never write both.
5. **Errors are values; panics are bugs.** Use `Result` for anything a caller could
   reasonably recover from. Reserve `panic!`/`unwrap`/`expect` for broken invariants.

## Reference Guide

### Concepts

| Topic | Reference | Load when |
|-------|-----------|-----------|
| thiserror (libraries) | [thiserror-libraries.md](references/thiserror-libraries.md) | Building a typed error enum for a library API |
| anyhow (applications) | [anyhow-applications.md](references/anyhow-applications.md) | Handling errors in a binary / top-level app |
| Error design | [error-design.md](references/error-design.md) | Shaping enums, `#[from]` conversion, recoverable vs panic, the anyhow/thiserror boundary |

### Templates

| Template | Load when |
|----------|-----------|
| [library-error.md](references/templates/library-error.md) | Need a complete thiserror library error module |
| [application-error.md](references/templates/application-error.md) | Need a complete anyhow application entry point with context |

## Validation Checklist

- [ ] Library errors are a typed `enum` deriving `thiserror::Error` — no `anyhow` in the public API
- [ ] Application code returns `anyhow::Result<T>` and adds `.context(...)`
- [ ] `#[from]` used for source conversions; no redundant `#[source]` alongside it
- [ ] `?` used instead of `unwrap()` on fallible values
- [ ] Panics only guard genuine invariants, with a reason
- [ ] `cargo clippy` clean, sniper passed
Pliki w paczce (7)
  • .gitkeep 1 KB
  • SKILL.md 5 KB
  • references/anyhow-applications.md 3 KB
  • references/error-design.md 3 KB
  • references/thiserror-libraries.md 3 KB
  • references/templates/application-error.md 2 KB
  • references/templates/library-error.md 2 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · fusengine/agents90MIT
heyAyushh/stacc95MIT
heyAyushh/stacc95MIT
TheBushidoCollective/han95Apache-2.0
Amey-Thakur/AI-SKILLS90MIT

Migawka bazy z 28.10.2026 · wersja paczki db9633994027 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 95rust-errors
    Projektuje typy błędów w Ruście: Result w miejsce unwrap, thiserror dla bibliotek, anyhow dla plików binarnych.
  • 90rust-patterns
    Stosuje wzorce w Rust: async z tokio, strategie własności, obsługę błędów z thiserror i anyhow, serde, Arc i wzorce API.
  • 100rust-conventions
    Podpowiada konwencje Rust: własność i pożyczanie, Result i Option, operator ?, wybór thiserror lub anyhow oraz clippy i rustfmt w CI.
  • 100rust-errors
    Projektuje błędy Rust przekazywane do TypeScript w aplikacjach Tauri: unie dyskryminowane i obsługę błędów poleceń.
  • 100rc-rust
    Wspiera pisanie i przegląd kodu Rust: własność i czasy życia, hierarchie błędów z thiserror i anyhow, async z Tokio, projektowanie traitów, testy, clippy i rustdoc.
  • 100rust
    Opisuje standardy inżynierii w Rust: projektowanie oparte na własności i pożyczaniu, obsługa błędów (thiserror, anyhow), async z tokio, usługi axum, testowanie oraz dyscyplina clippy i cargo-deny.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.