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