日本の山岳一覧・百名山 API を開発しましたCLICK !

Rust | Enum を String 型の文字列に変換する

RustでEnumをStringに変換する
  • URLをコピーしました!

トレイトstd::fmt::Displayを実装することで、enum を簡単に文字列に変換できます。

Trait std::fmt::Display を実装しよう

  1. トレイトstd::fmt::Displayを実装する
  2. その中で、enum を文字列に変換する関数to_string()を定義する
  3. Strum というクレートもあるよ!
目次

Enum を String に変換する

std::fmt::Display を実装する

トレイトstd::fmt::Displayを実装することで、enum を文字列に変換する関数to_string()を定義します。

もちろん、トレイトなのでto_string()を定義しないとコンパイルが通りません。

use std::fmt;

#[derive(Debug, Copy, Clone)]
enum Db {
    OracleDatabase,
    SQLServer,
    PostgreSQL,
    MySQL,
}

impl fmt::Display for Db {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Db::OracleDatabase => write!(f, "OracleDatabase"),
            Db::SQLServer => write!(f, "SQLServer"),
            Db::PostgreSQL => write!(f, "PostgreSQL"),
            Db::MySQL => write!(f, "MySQL"),
        }
    }
}

fn main() {
    let db: String = Db::OracleDatabase.to_string();
    assert_eq!(String::from("OracleDatabase"), db);
    println!("DB is {}.", db);

    let db: String = Db::SQLServer.to_string();
    assert_eq!(String::from("SQLServer"), db);
    println!("DB is {}.", db);

    let db: String = Db::PostgreSQL.to_string();
    assert_eq!(String::from("PostgreSQL"), db);
    println!("DB is {}.", db);

    let db: String = Db::MySQL.to_string();
    assert_eq!(String::from("MySQL"), db);
    println!("DB is {}.", db);
}

以下が実行結果です。

$ cargo run
DB is OracleDatabase.
DB is SQLServer.
DB is PostgreSQL.
DB is MySQL.

Strum という便利なクレートもある

今回は複雑なことをしないので自前で実装しましたが、Strum という Enum と文字列を簡単に扱うためのマクロが定義されたクレートがあります。

気になる方はチェックしてみてください!

Strum is a set of macros and traits for working with enums and strings easier in Rust.

https://github.com/Peternator7/strum

まとめ

Enum の文字列変換を簡単に実装することができました\(^-^)/

参考

RustでEnumをStringに変換する

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする

目次