thiserror
thiserror クレートは、エラー型を定義する際の定型的なコードを避けるのに役立つマクロを提供します。From<T>、Display、および Error トレイトの実装を支援する derive マクロを提供します。
// 著作権 2024 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::io::Read; use std::{fs, io}; use thiserror::Error; #[derive(Debug, Error)] enum ReadUsernameError { #[error("I/O error: {0}")] IoError(#[from] io::Error), #[error("Found no username in {0}")] EmptyUsername(String), } fn read_username(path: &str) -> Result<String, ReadUsernameError> { let mut username = String::with_capacity(100); fs::File::open(path)?.read_to_string(&mut username)?; if username.is_empty() { return Err(ReadUsernameError::EmptyUsername(String::from(path))); } Ok(username) } fn main() { //fs::write("config.dat", "").unwrap(); match read_username("config.dat") { Ok(username) => println!("Username: {username}"), Err(err) => println!("Error: {err}"), } }
Errorderive マクロはthiserrorによって提供されており、コンパクトな方法でエラー型を定義するのに役立つ多くの便利な属性を備えています。#[error]のメッセージはDisplayトレイトを derive するために使用されます。- (
thiserror::)Errorderive マクロは、(std::error::)Errorトレイトを実装する効果がありますが、これと同じものではありません。トレイトとマクロは名前空間を共有しません。