From 0c7eb84d36e41e562f6a9a092c67d772f46f6fc5 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Mon, 19 Aug 2019 00:21:10 +0100 Subject: [PATCH] impl FromStr for Memo Memo::from_str was previously shadowing a built-in trait method. --- zcash_primitives/src/note_encryption.rs | 37 +++++++++++++++---------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/zcash_primitives/src/note_encryption.rs b/zcash_primitives/src/note_encryption.rs index 0d0e83a70..26440160a 100644 --- a/zcash_primitives/src/note_encryption.rs +++ b/zcash_primitives/src/note_encryption.rs @@ -106,11 +106,6 @@ impl Memo { } } - /// Returns a `Memo` containing the given string, or `None` if the string is too long. - pub fn from_str(memo: &str) -> Option { - Memo::from_bytes(memo.as_bytes()) - } - /// Returns the underlying bytes of the `Memo`. pub fn as_bytes(&self) -> &[u8] { &self.0[..] @@ -134,6 +129,15 @@ impl Memo { } } +impl str::FromStr for Memo { + type Err = (); + + /// Returns a `Memo` containing the given string, or an error if the string is too long. + fn from_str(memo: &str) -> Result { + Memo::from_bytes(memo.as_bytes()).ok_or(()) + } +} + pub fn generate_esk(rng: &mut R) -> Fs { // create random 64 byte buffer let mut buffer = [0u8; 64]; @@ -557,6 +561,7 @@ mod tests { use pairing::bls12_381::{Bls12, Fr, FrRepr}; use rand_core::{CryptoRng, RngCore}; use rand_os::OsRng; + use std::str::FromStr; use super::{ kdf_sapling, prf_ock, sapling_ka_agree, try_sapling_compact_note_decryption, @@ -661,16 +666,18 @@ mod tests { 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68 ]) ); - assert!(Memo::from_str( - "thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ - iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ - veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeryyyyyyyyyyyyyyyyyyyyyyyyyy \ - looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \ - meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \ - but it's now a bit too long" - ) - .is_none()); + assert_eq!( + Memo::from_str( + "thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ + iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ + veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeryyyyyyyyyyyyyyyyyyyyyyyyyy \ + looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \ + meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \ + but it's now a bit too long" + ), + Err(()) + ); } #[test]