クレート紹介 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,
}
EnumString
はFromStr
トレイトを実装してくれます。
おかげで、
Version::from_str("HTTP/1.0");
と、文字列から enum オブジェクトを生成できる他
Display
によって、トレイトのディスプレイを自動で実装できます。
上記のように、オブジェクトを持つというより、バージョンや定数を管理する時に楽になります。