thiserror
Types d’erreurs personnalisés
thiserror est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Why Custom Errors?
Libraries should expose meaningful error types so callers can react to specific failures. Writing these by hand means lots of boilerplate. The thiserror crate generates it for you.
Adding thiserror
Add it as a dependency. It is a derive-macro crate with zero runtime cost.
[dependencies]
thiserror = "1.0"Defining an Error Enum
Derive Error on an enum where each variant is a distinct failure. The #[error("...")] attribute provides the Display message.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Interpolating Fields
The message string can reference named or positional fields, so error text carries context.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ConfigError {
#[error("missing key: {key}")]
Missing { key: String },
#[error("value {0} out of range")]
OutOfRange(i32),
}Automatic Display and Error
The derive implements both Display (from your messages) and std::error::Error automatically. No manual impl blocks needed.
Wrapping a Source Error
#[from] generates a From impl so the ? operator can convert an underlying error into your type. #[source] marks the cause.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AppError {
#[error("io failure")]
Io(#[from] std::io::Error),
#[error("parse failure")]
Parse(#[from] std::num::ParseIntError),
}Using It with ?
Thanks to #[from], the ? operator auto-converts standard errors into your AppError.
fn read_number(path: &str) -> Result<i32, AppError> {
let text = std::fs::read_to_string(path)?; // io::Error -> AppError
let n: i32 = text.trim().parse()?; // ParseIntError -> AppError
Ok(n)
}The source Chain
When you wrap an error, thiserror exposes the cause through Error::source, enabling full error chains for logging and debugging.
transparent Errors
#[error(transparent)] forwards both Display and source to the wrapped error, useful for a pass-through variant.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}When to Use thiserror
Reach for thiserror when:
- You are writing a library
- Callers need to match on specific error variants
- You want a stable, typed error API
For applications where you just want to bubble errors up, anyhow is often simpler.
Matching on Variants
Because the error is a real enum, callers can match on it to react differently to each failure kind.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Quick Check
What does the #[from] attribute generate in a thiserror enum?
Recap
You learned the thiserror crate:
#[derive(Error)]generates Display and Error impls#[error("...")]defines messages with field interpolation#[from]enables?conversion from source errorstransparentforwards to a wrapped error- Ideal for typed library error APIs
Questions Fréquemment Posées
La leçon « thiserror » est-elle gratuite ?
Oui — le texte complet de « thiserror » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « thiserror » ?
Types d’erreurs personnalisés Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?
Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « thiserror » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?
Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.