UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Rust】Cargoで依存関係の追加

Rustで以下のようなenumが用意されていて

pub enum ResistorColor {
    Black,
    Brown ,
    Red ,
}

次のようなテストをパスするcolors()関数を作るという問題を解いているとき

#[test]
fn test_all_colors() {
    use ResistorColor::*;
    assert_eq!(
        colors(),
        vec![Black, Brown, Red]
    );
}

以下のような実装を思いついたが、

pub fn colors() -> Vec<ResistorColor> {
    vec![ResistorColor::Black, ResistorColor::Brown, ResistorColor::Red]
}

このようにいちいち並べるのは変更しづらいのでenumの定義順にベクターを返すようなことをしたいがどうやるかわからなかったので調べた

Rustのenumは標準ではできないので、crateを依存関係に追加して機能を拡張(?)する必要があるみたい

Cargoで依存関係の追加

やりたいことはenum-iteratorというクレートを使えばできるようなのでCargo.toml[dependencies]enum-iteratorというクレートを記載した

[dependencies]
enum-iterator = "0.7.0

Dependencies - Rust By Example 日本語版

enum_iterator - Rust

そして、実装はこんな感じになった

use enum_iterator::IntoEnumIterator;

#[derive(Debug, PartialEq, IntoEnumIterator)]
pub enum ResistorColor {
    Black,
    Brown,
    Red,
}
pub fn colors() -> Vec<ResistorColor> {
    resistorColor::into_enum_iter().collect()
}

まず、useIntoEnumIteratorモジュールをスコープに持ち込む

useキーワードでパスをスコープに持ち込む - The Rust Programming Language 日本語版

次にderiveはよくわかってないがDebugPartialEqIntoEnumIteratorを宣言した

いまのところエラーがでたから追加しただけで、よくわかっていない(後日調べる)

継承(Derive) - Rust By Example 日本語版

一旦これでやりたいことが実現できた