0Pricing
Learn Rust Coding · Pelajaran

thiserror

Tipe error kustom

thiserror adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Mengapa Error Kustom?

Pustaka sebaiknya menyediakan jenis error yang bermakna agar pemanggil dapat merespons kegagalan tertentu. Menulisnya secara manual membutuhkan banyak kode berulang. Crate thiserror membuatnya untuk Anda.

Menambahkan thiserror

Tambahkan sebagai dependensi. Crate ini merupakan crate derive-macro tanpa biaya saat runtime.

[dependencies]
thiserror = "1.0"

Mendefinisikan Enum Error

Terapkan derive Error pada enum yang setiap variannya mewakili kegagalan yang berbeda. Atribut #[error("...")] menyediakan pesan Display.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum DataError {
    #[error("item not found")]
    NotFound,
    #[error("invalid input: {0}")]
    Invalid(String),
}

Menginterpolasikan Field

String pesan dapat merujuk pada field bernama atau berdasarkan posisi, sehingga teks error membawa konteks.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum ConfigError {
    #[error("missing key: {key}")]
    Missing { key: String },
    #[error("value {0} out of range")]
    OutOfRange(i32),
}

Display dan Error Otomatis

Derive tersebut secara otomatis mengimplementasikan Display (dari pesan Anda) dan std::error::Error. Anda tidak perlu menulis blok impl secara manual.

Membungkus Error Sumber

#[from] menghasilkan impl From sehingga operator ? dapat mengonversi error yang mendasari menjadi jenis Anda. #[source] menandai penyebabnya.

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),
}

Menggunakannya dengan ?

Berkat #[from], operator ? secara otomatis mengonversi error standar menjadi AppError Anda.

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)
}

Rantai source

Saat Anda membungkus sebuah error, thiserror menyediakan penyebabnya melalui Error::source, sehingga rantai error lengkap dapat digunakan untuk pencatatan dan penelusuran kesalahan.

Error transparan

#[error(transparent)] meneruskan Display dan source ke error yang dibungkus, sehingga berguna untuk varian yang hanya meneruskan error.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum WrapError {
    #[error(transparent)]
    Other(#[from] std::io::Error),
}

Kapan Menggunakan thiserror

Gunakan thiserror ketika:

  • Anda sedang menulis pustaka
  • Pemanggil perlu melakukan pencocokan pada varian error tertentu
  • Anda menginginkan API error bertipe yang stabil

Untuk aplikasi yang hanya perlu meneruskan error ke atas, anyhow biasanya lebih sederhana.

Mencocokkan Varian

Karena error tersebut merupakan enum sungguhan, pemanggil dapat menggunakan match untuk merespons setiap jenis kegagalan secara berbeda.

fn handle(err: AppError) {
    match err {
        AppError::Io(_) => println!("retry the file operation"),
        AppError::Parse(_) => println!("ask the user to fix input"),
    }
}

Pemeriksaan Singkat

Apa yang dihasilkan atribut #[from] dalam enum thiserror?

Ringkasan

Anda telah mempelajari crate thiserror:

  • #[derive(Error)] menghasilkan impl Display dan Error
  • #[error("...")] mendefinisikan pesan dengan interpolasi field
  • #[from] memungkinkan konversi ? dari error sumber
  • transparent meneruskan ke error yang dibungkus
  • Ideal untuk API error bertipe pada pustaka

Pertanyaan yang Sering Diajukan

Apakah pelajaran “thiserror” gratis?

Ya — teks lengkap “thiserror” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “thiserror”?

Tipe error kustom Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?

Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “thiserror” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?

Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Result dan Operator ?
  2. thiserror
  3. anyhow
  4. Konversi Error
← Kembali ke Learn Rust Coding