diff --git a/zcash_primitives/src/serialize.rs b/zcash_primitives/src/serialize.rs index e09fc44d1..3c9f34b16 100644 --- a/zcash_primitives/src/serialize.rs +++ b/zcash_primitives/src/serialize.rs @@ -70,6 +70,13 @@ impl Vector { F: Fn(&mut R) -> io::Result, { let count = CompactSize::read(&mut reader)?; + Self::read_count(reader, count, func) + } + + pub fn read_count(mut reader: R, count: usize, func: F) -> io::Result> + where + F: Fn(&mut R) -> io::Result, + { (0..count).map(|_| func(&mut reader)).collect() } @@ -80,6 +87,17 @@ impl Vector { CompactSize::write(&mut writer, vec.len())?; vec.iter().try_for_each(|e| func(&mut writer, e)) } + + pub fn write_items, F>( + mut writer: W, + vec: I, + func: F, + ) -> io::Result<()> + where + F: Fn(&mut W, &E) -> io::Result<()>, + { + vec.into_iter().try_for_each(|e| func(&mut writer, &e)) + } } pub struct Optional;