クレート紹介 part1

書くネタないわけでは)ないです。

本日の一言

これはやばい。 浄化されて消えかける。

anyhow

エラー処理がぐーんと楽になるやつです。 標準で Error トレイトが存在するのは知ってましたが、使わざる得なくなりました。

anyhow::Result

anyhow::Result を使えば、他のことを考えないで済むようになりました。

anyhow::anyhow

anyhow マクロです。

extern crate anyhow;
use anyhow::{anyhow, Result};

fn main() -> Result<()> {
    let reason = "エラープログラムだから";
    Err(anyhow!("原因は{}", reason))
}

Error トレイトを実装したオブジェクトを文字列から簡単に作れます。
format も使えるので、{:?}でオブジェクトの中身を表示させられたりすることもできます。

anyhow::bail ensure

extern crate anyhow;
extern crate rand;
use anyhow::{Result, bail};

fn main() -> Result<()> {
    if rand::random() {
        bail!("random error");
    }
    Ok(())
}

anyhow!に加え、return Err()まで実装してくれるマクロです。

extern crate anyhow;
extern crate rand;
use anyhow::{Result, ensure};

fn main() -> Result<()> {
    ensure!(rand::random::<bool>(), "random error");
    Ok(())
}

assert!と同じような効果を持ってます。

使い方

strum

enum を使いやすくしてくれます。

enum との変換が楽になる

#[derive(Debug, Clone, PartialEq, Eq, strum_macros::Display, strum::EnumString)]
pub enum Version {
    #[strum(serialize = "HTTP/1.0")]
    Http10,
    #[strum(serialize = "HTTP/1.1")]
    Http11,
    #[strum(serialize = "HTTP/2.0")]
    Http20,
    #[strum(serialize = "HTTP/3.0")]
    Http30,
}

EnumStringFromStrトレイトを実装してくれます。
おかげで、

Version::from_str("HTTP/1.0");

と、文字列から enum オブジェクトを生成できる他

Displayによって、トレイトのディスプレイを自動で実装できます。

上記のように、オブジェクトを持つというより、バージョンや定数を管理する時に楽になります。

使い方