Sto provando a selezionare un algoritmo digest (da rug-crypto) basato su una stringa di configurazione. In Python o JavaScript, diciamo, probabilmente sarei utilizzare la reflection per arrivare a questo:Idiomatic alternative to reflection
getattr(Digest, myAlgorithm)
... ma da quello che ho potuto Google, questa non è delle migliori pratiche in un linguaggio come Ruggine (in più non ho trovato dettagli su come potrebbe essere fatto). Il mio primo pensiero è stato quello di utilizzare un pattern match:
let mut digest = match myAlgorithm {
"sha256" => Sha256::new(),
...
};
Tuttavia, questo non funziona perché, mentre tutti i rami della partita implementano lo stesso tratto, sono in ultima analisi, i tipi differenti. Inoltre, presumendo che ci fosse un modo per aggirare questo, è un sacco di problemi enumerare manualmente tutte queste opzioni nel codice.
Qual è il modo giusto per farlo in Rust?
Sai di * tratti * in Rust? Sono utilizzati per specificare un'interfaccia comune a più implementazioni. –