我如何遍历实现特征的类型

How do I iterate through the types that implement a trait

我正在处理货币。

我希望能够从“USD”等股票代码解析它们。

我已经实现了一个货币特征,我希望它有一个编译时股票代码。

我想遍历所有实现 Currency 的类型,以检查它们的股票代码是否等于正在解析的字符串。如果是这样,我想return一种那种货币。

到目前为止我有这个:

pub trait Currency {
    const TICKER_SYMBOL: String;
}

#[derive(debug)]
struct USD;
impl Currency for USD { const TICKER_SYMBOL:  String = "USD".to_string();}

impl FromStr for dyn Currency {
    type Err = &'static str;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        todo!()
    }
}

strum crate + 枚举给了我想要的东西。

use std::str::FromStr;
use strum_macros::EnumString;

#[derive(Debug, PartialEq, EnumString)]
enum Currency {
    USD,
    BTC
}

    #[test]
    fn parses_currencies() {
        let c = Currency::from_str("USD");
        assert_eq!(Ok(Currency::USD), c);
        let err = Currency::from_str("monopoly money");
        assert!(err.is_err());
    }