Make Memo a wrapper for Box<[u8; 512]>

This commit is contained in:
Deirdre Connolly 2020-02-12 21:30:29 -05:00 committed by Deirdre Connolly
parent ea8fa5ef46
commit 99e3b16476
1 changed files with 7 additions and 7 deletions

View File

@ -9,8 +9,8 @@ use std::{cmp, convert::TryFrom, fmt};
/// recipient of the note. /// recipient of the note.
/// ///
/// [ps]: https://zips.z.cash/protocol/protocol.pdf#notept /// [ps]: https://zips.z.cash/protocol/protocol.pdf#notept
#[derive(Clone, Copy)] #[derive(Clone)]
pub struct Memo([u8; 512]); pub struct Memo(Box<[u8; 512]>);
impl<'a> TryFrom<&'a [u8]> for Memo { impl<'a> TryFrom<&'a [u8]> for Memo {
type Error = &'static str; type Error = &'static str;
@ -21,11 +21,11 @@ impl<'a> TryFrom<&'a [u8]> for Memo {
match input.len().cmp(&512) { match input.len().cmp(&512) {
cmp::Ordering::Less => { cmp::Ordering::Less => {
full_bytes[0..input.len()].copy_from_slice(input); full_bytes[0..input.len()].copy_from_slice(input);
Ok(Memo(full_bytes)) Ok(Memo(Box::new(full_bytes)))
} }
cmp::Ordering::Equal => { cmp::Ordering::Equal => {
full_bytes[..].copy_from_slice(input); full_bytes[..].copy_from_slice(input);
Ok(Memo(full_bytes)) Ok(Memo(Box::new(full_bytes)))
} }
cmp::Ordering::Greater => Err("Memos have a max length of 512 bytes."), cmp::Ordering::Greater => Err("Memos have a max length of 512 bytes."),
} }
@ -50,7 +50,7 @@ impl fmt::Debug for Memo {
#[test] #[test]
fn memo_fmt() { fn memo_fmt() {
let memo = Memo( let memo = Memo(Box::new(
*b"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ *b"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
@ -58,7 +58,7 @@ fn memo_fmt() {
looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \ looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \
meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \ meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \
but it's just short enough", but it's just short enough",
); ));
assert_eq!(format!("{:?}", memo), assert_eq!(format!("{:?}", memo),
"Memo(\"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeryyyyyyyyyyyyyyyyyyyyyyyyyy looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo but it\\\'s just short enough\")" "Memo(\"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeryyyyyyyyyyyyyyyyyyyyyyyyyy looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo but it\\\'s just short enough\")"
@ -67,7 +67,7 @@ fn memo_fmt() {
let mut some_bytes = [0u8; 512]; let mut some_bytes = [0u8; 512];
some_bytes[0] = 0xF6; some_bytes[0] = 0xF6;
assert_eq!(format!("{:?}", Memo(some_bytes)), assert_eq!(format!("{:?}", Memo(Box::new(some_bytes))),
"Memo(\"f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\")" "Memo(\"f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\")"
); );
} }