transaction/hash.rs: Add FromStr implementation (issue #299)

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
This commit is contained in:
Kiminuo 2020-05-12 13:12:11 +00:00 committed by Deirdre Connolly
parent 46cb7c02f2
commit 6465689555
1 changed files with 27 additions and 2 deletions

View File

@ -3,7 +3,10 @@ use std::fmt;
#[cfg(test)]
use proptest_derive::Arbitrary;
use crate::{serialization::ZcashSerialize, sha256d_writer::Sha256dWriter};
use crate::{
serialization::{SerializationError, ZcashSerialize},
sha256d_writer::Sha256dWriter,
};
use super::Transaction;
@ -33,6 +36,19 @@ impl fmt::Debug for TransactionHash {
}
}
impl std::str::FromStr for TransactionHash {
type Err = SerializationError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let mut bytes = [0; 32];
if hex::decode_to_slice(s, &mut bytes[..]).is_err() {
Err(SerializationError::Parse("hex decoding error"))
} else {
Ok(TransactionHash(bytes))
}
}
}
#[cfg(test)]
mod tests {
use std::io::Write;
@ -51,7 +67,16 @@ mod tests {
assert_eq!(
format!("{:?}", hash),
"TransactionHash(\"bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631\")"
r#"TransactionHash("bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631")"#
);
}
#[test]
fn transactionhash_from_str() {
let hash:TransactionHash = "bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631".parse().unwrap();
assert_eq!(
format!("{:?}", hash),
r#"TransactionHash("bf46b4b5030752fedac6f884976162bbfb29a9398f104a280b3e34d51b416631")"#
);
}
}