Anyhow クレートについて - kossy0701/walk-the-dog GitHub Wiki
Anyhowとは?
https://github.com/dtolnay/anyhow
- エラーハンドリングを簡潔に行うためのクレート
- ライブラリの実装をする場合は Anyhow ではなく thiserrorを使うことが推奨されている
基本的な使い方
use anyhow::{Result, anyhow};
fn some_function() -> Result<()> {
let condition = false; // 仮の条件
if condition {
return Err(anyhow!("Something went wrong"));
}
Ok(())
}
fn main() {
match some_function() {
Ok(_) => println!("Everything worked!"),
Err(e) => println!("Error: {:?}", e),
}
}
Anyhowを使わない場合
- ChatGPTからの引用
- Anyhowを使うケースよりも記述量が多いことがわかる
use std::fmt;
enum MyError {
CustomError(String),
}
impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
MyError::CustomError(msg) => write!(f, "{}", msg),
}
}
}
impl fmt::Debug for MyError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
MyError::CustomError(msg) => write!(f, "CustomError: {}", msg),
}
}
}
fn some_function() -> Result<(), MyError> {
let condition = false; // 仮の条件
if condition {
return Err(MyError::CustomError("Something went wrong".to_string()));
}
Ok(())
}
fn main() {
match some_function() {
Ok(_) => println!("Everything worked!"),
Err(e) => println!("Error: {:?}", e),
}
}