トレイトstd::fmt::Display
を実装することで、enum を簡単に文字列に変換できます。
Trait std::fmt::Display
を実装しよう
- トレイト
std::fmt::Display
を実装する - その中で、enum を文字列に変換する関数
to_string()
を定義する - 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 の文字列変換を簡単に実装することができました\(^-^)/
コメント