Вы почти хотите что-то вроде
U256::from_str(&hash)?
Существует преобразование из &str
в черту FromStr
, называемое from_str
. Он возвращает значение Result<T, E>
, потому что синтаксический анализ строки может завершиться неудачно.
Я думаю, что смогу использовать реализацию std::convert::From<&'static str>
, но я не понимаю, как я должен сохранить ha sh в области действия?
Вы не можете сохранить ha sh в области действия с временем жизни 'static
. Похоже, что это удобный метод, позволяющий использовать строковые константы в вашей программе, но на самом деле это не более чем U256::from_str(&hash).unwrap()
.
Однако ...
Если вам нужен SHA- 1, лучшим типом, вероятно, является [u8; 20]
или, может быть, [u32; 5]
.
Вам нужен декодер base 16, например base16 :: decode_slice . Вот как это может выглядеть в действии:
/// Error if the hash cannot be parsed.
struct InvalidHash;
/// Type for SHA-1 hashes.
type SHA1 = [u8; 20];
fn read_hash(s: &str) -> Result<SHA1, InvalidHash> {
let mut hash = [0; 20];
match base16::decode_slice(s, &mut hash[..]) {
Ok(20) => Ok(hash),
_ => Err(InvalidHash),
}
}