1 use bitcoin::hashes::hex::{FromHex, HexToArrayError};
2 use bitcoin::pow::Work;
4 pub fn hex_to_work(hex: &str) -> Result<Work, HexToArrayError> {
5 let bytes = <[u8; 32]>::from_hex(hex)?;
6 Ok(Work::from_be_bytes(bytes))
12 use bitcoin::hashes::hex::HexToBytesError;
13 use bitcoin::pow::Work;
16 fn hex_to_work_empty_str() {
17 assert!(hex_to_work("").is_err());
21 fn hex_to_work_too_short_str() {
22 let hex = String::from_utf8(vec![b'0'; 32]).unwrap();
23 assert_eq!(hex_to_work(&hex), Err(HexToArrayError::InvalidLength(32, 64)));
27 fn hex_to_work_too_long_str() {
28 let hex = String::from_utf8(vec![b'0'; 128]).unwrap();
29 assert_eq!(hex_to_work(&hex), Err(HexToArrayError::InvalidLength(128, 64)));
33 fn hex_to_work_odd_length_str() {
34 let hex = String::from_utf8(vec![b'0'; 65]).unwrap();
35 assert_eq!(hex_to_work(&hex), Err(HexToArrayError::Conversion(HexToBytesError::OddLengthString(65))));
39 fn hex_to_work_invalid_char() {
40 let hex = String::from_utf8(vec![b'G'; 64]).unwrap();
41 assert_eq!(hex_to_work(&hex), Err(HexToArrayError::Conversion(HexToBytesError::InvalidChar(b'G'))));
45 fn hex_to_work_lowercase_str() {
46 let hex: String = std::iter::repeat("1a").take(32).collect();
47 assert_eq!(hex_to_work(&hex).unwrap(), Work::from_be_bytes([0x1a; 32]));
51 fn hex_to_work_uppercase_str() {
52 let hex: String = std::iter::repeat("1A").take(32).collect();
53 assert_eq!(hex_to_work(&hex).unwrap(), Work::from_be_bytes([0x1A; 32]));