From f87382e8564c27d6b1ee95bbc660410ae72511d8 Mon Sep 17 00:00:00 2001 From: parazyd Date: Fri, 17 May 2024 12:49:01 +0200 Subject: [PATCH] serial: Use mutable references for non-async {en,de}code functions --- src/blockchain/block_store.rs | 44 +++---- src/sdk/src/crypto/note.rs | 7 +- src/sdk/src/wasm/util.rs | 2 +- src/serial/derive-internal/src/sync_derive.rs | 28 ++--- src/serial/src/lib.rs | 110 +++++++++--------- src/serial/src/types/bridgetree.rs | 100 ++++++++-------- src/serial/src/types/collections.rs | 56 ++++----- src/serial/src/types/hash.rs | 4 +- src/serial/src/types/pasta.rs | 16 +-- src/serial/src/types/semver.rs | 40 +++---- src/serial/src/types/url.rs | 6 +- 11 files changed, 209 insertions(+), 204 deletions(-) diff --git a/src/blockchain/block_store.rs b/src/blockchain/block_store.rs index 7c2825783..c45555926 100644 --- a/src/blockchain/block_store.rs +++ b/src/blockchain/block_store.rs @@ -190,25 +190,25 @@ impl BlockRanks { // Note: Doing all the imports here as this might get obselete if // we implemented Encodable/Decodable for num_bigint::BigUint. impl darkfi_serial::Encodable for BlockRanks { - fn encode(&self, mut s: S) -> std::io::Result { + fn encode(&self, s: &mut S) -> std::io::Result { let mut len = 0; - len += self.target_rank.to_bytes_be().encode(&mut s)?; - len += self.targets_rank.to_bytes_be().encode(&mut s)?; - len += self.hash_rank.to_bytes_be().encode(&mut s)?; - len += self.hashes_rank.to_bytes_be().encode(&mut s)?; + len += self.target_rank.to_bytes_be().encode(s)?; + len += self.targets_rank.to_bytes_be().encode(s)?; + len += self.hash_rank.to_bytes_be().encode(s)?; + len += self.hashes_rank.to_bytes_be().encode(s)?; Ok(len) } } impl darkfi_serial::Decodable for BlockRanks { - fn decode(mut d: D) -> std::io::Result { - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> std::io::Result { + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let target_rank: BigUint = BigUint::from_bytes_be(&bytes); - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let targets_rank: BigUint = BigUint::from_bytes_be(&bytes); - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let hash_rank: BigUint = BigUint::from_bytes_be(&bytes); - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let hashes_rank: BigUint = BigUint::from_bytes_be(&bytes); let ret = Self { target_rank, targets_rank, hash_rank, hashes_rank }; Ok(ret) @@ -259,26 +259,26 @@ impl BlockDifficulty { // Note: Doing all the imports here as this might get obselete if // we implemented Encodable/Decodable for num_bigint::BigUint. impl darkfi_serial::Encodable for BlockDifficulty { - fn encode(&self, mut s: S) -> std::io::Result { + fn encode(&self, s: &mut S) -> std::io::Result { let mut len = 0; - len += self.height.encode(&mut s)?; - len += self.timestamp.encode(&mut s)?; - len += self.difficulty.to_bytes_be().encode(&mut s)?; - len += self.cummulative_difficulty.to_bytes_be().encode(&mut s)?; - len += self.ranks.encode(&mut s)?; + len += self.height.encode(s)?; + len += self.timestamp.encode(s)?; + len += self.difficulty.to_bytes_be().encode(s)?; + len += self.cummulative_difficulty.to_bytes_be().encode(s)?; + len += self.ranks.encode(s)?; Ok(len) } } impl darkfi_serial::Decodable for BlockDifficulty { - fn decode(mut d: D) -> std::io::Result { - let height: u32 = darkfi_serial::Decodable::decode(&mut d)?; - let timestamp: Timestamp = darkfi_serial::Decodable::decode(&mut d)?; - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> std::io::Result { + let height: u32 = darkfi_serial::Decodable::decode(d)?; + let timestamp: Timestamp = darkfi_serial::Decodable::decode(d)?; + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let difficulty: BigUint = BigUint::from_bytes_be(&bytes); - let bytes: Vec = darkfi_serial::Decodable::decode(&mut d)?; + let bytes: Vec = darkfi_serial::Decodable::decode(d)?; let cummulative_difficulty: BigUint = BigUint::from_bytes_be(&bytes); - let ranks: BlockRanks = darkfi_serial::Decodable::decode(&mut d)?; + let ranks: BlockRanks = darkfi_serial::Decodable::decode(d)?; let ret = Self { height, timestamp, difficulty, cummulative_difficulty, ranks }; Ok(ret) } diff --git a/src/sdk/src/crypto/note.rs b/src/sdk/src/crypto/note.rs index 5b0a97ccd..c0e19992c 100644 --- a/src/sdk/src/crypto/note.rs +++ b/src/sdk/src/crypto/note.rs @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +use std::io::Cursor; + use chacha20poly1305::{AeadInPlace, ChaCha20Poly1305, KeyInit}; use darkfi_serial::{Decodable, Encodable, SerialDecodable, SerialEncodable}; use pasta_curves::{group::ff::Field, pallas}; @@ -75,7 +77,10 @@ impl AeadEncryptedNote { &[], &mut plaintext, ) { - Ok(()) => Ok(D::decode(&plaintext[..ct_len - AEAD_TAG_SIZE])?), + Ok(()) => { + let mut cursor = Cursor::new(&plaintext[..ct_len - AEAD_TAG_SIZE]); + Ok(D::decode(&mut cursor)?) + } Err(e) => Err(ContractError::IoError(format!("Note decrypt failed: {}", e))), } } diff --git a/src/sdk/src/wasm/util.rs b/src/sdk/src/wasm/util.rs index 20d114b2c..f8716e821 100644 --- a/src/sdk/src/wasm/util.rs +++ b/src/sdk/src/wasm/util.rs @@ -178,7 +178,7 @@ pub fn get_tx_location(hash: &TransactionHash) -> GenericResult<(u32, u16)> { let ret = unsafe { get_tx_location_(buf.as_ptr()) }; let loc_data = parse_ret(ret)?.ok_or(ContractError::DbGetFailed)?; let mut cursor = Cursor::new(loc_data); - Ok((Decodable::decode(&mut cursor)?, Decodable::decode(cursor)?)) + Ok((Decodable::decode(&mut cursor)?, Decodable::decode(&mut cursor)?)) } extern "C" { diff --git a/src/serial/derive-internal/src/sync_derive.rs b/src/serial/derive-internal/src/sync_derive.rs index 4ea9f06aa..078703912 100644 --- a/src/serial/derive-internal/src/sync_derive.rs +++ b/src/serial/derive-internal/src/sync_derive.rs @@ -51,7 +51,7 @@ fn named_fields( ); variant_body.extend(quote! { - len += #field_ident.encode(&mut s)?; + len += #field_ident.encode(s)?; }) } } @@ -94,7 +94,7 @@ fn unnamed_fields( ); variant_body.extend(quote! { - len += #field_ident.encode(&mut s)?; + len += #field_ident.encode(s)?; }) } } @@ -156,7 +156,7 @@ pub fn enum_ser(input: &ItemEnum, cratename: Ident) -> syn::Result Ok(quote! { impl #impl_generics #cratename::Encodable for #enum_ident #ty_generics #where_clause { - fn encode(&self, mut s: S) -> ::core::result::Result { + fn encode(&self, s: &mut S) -> ::core::result::Result { let variant_idx: u8 = match self { #all_variants_idx_body }; @@ -210,7 +210,7 @@ pub fn enum_de(input: &ItemEnum, cratename: Ident) -> syn::Result { ); variant_header.extend(quote! { - #field_name: #cratename::Decodable::decode(&mut d)?, + #field_name: #cratename::Decodable::decode(d)?, }); } } @@ -230,7 +230,7 @@ pub fn enum_de(input: &ItemEnum, cratename: Ident) -> syn::Result { ); variant_header.extend(quote! { - #cratename::Decodable::decode(&mut d)?, + #cratename::Decodable::decode(d)?, }); } } @@ -253,8 +253,8 @@ pub fn enum_de(input: &ItemEnum, cratename: Ident) -> syn::Result { Ok(quote! { impl #impl_generics #cratename::Decodable for #name #ty_generics #where_clause { - fn decode(mut d: D) -> ::core::result::Result { - let variant_tag: u8 = #cratename::Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> ::core::result::Result { + let variant_tag: u8 = #cratename::Decodable::decode(d)?; let mut return_value = #variant_arms { @@ -289,7 +289,7 @@ pub fn struct_ser(input: &ItemStruct, cratename: Ident) -> syn::Result syn::Result syn::Result(&self, mut s: S) -> ::core::result::Result { + fn encode(&self, s: &mut S) -> ::core::result::Result { let mut len = 0; #body Ok(len) @@ -357,7 +357,7 @@ pub fn struct_de(input: &ItemStruct, cratename: Ident) -> syn::Result syn::Result syn::Result(mut d: D) -> ::core::result::Result { + fn decode(d: &mut D) -> ::core::result::Result { let mut return_value = #return_value; return_value.#method_ident(); Ok(return_value) @@ -398,7 +398,7 @@ pub fn struct_de(input: &ItemStruct, cratename: Ident) -> syn::Result(mut d: D) -> ::core::result::Result { + fn decode(d: &mut D) -> ::core::result::Result { Ok(#return_value) } } diff --git a/src/serial/src/lib.rs b/src/serial/src/lib.rs index 23f1f0aa9..c985e0367 100644 --- a/src/serial/src/lib.rs +++ b/src/serial/src/lib.rs @@ -41,12 +41,12 @@ pub trait Encodable { /// Encode an object with a well-defined format. /// Should only ever error if the underlying `Write` errors. /// Returns the number of bytes written on success. - fn encode(&self, e: W) -> Result; + fn encode(&self, e: &mut W) -> Result; } /// Data which can be decoded in a consensus-consistent way. pub trait Decodable: Sized { - fn decode(d: D) -> Result; + fn decode(d: &mut D) -> Result; } /// Encode an object into a vector. @@ -241,14 +241,14 @@ macro_rules! impl_int_encodable { ($ty:ident, $meth_dec:ident, $meth_enc:ident) => { impl Decodable for $ty { #[inline] - fn decode(mut d: D) -> Result { - ReadExt::$meth_dec(&mut d).map($ty::from_le) + fn decode(d: &mut D) -> Result { + ReadExt::$meth_dec(d).map($ty::from_le) } } impl Encodable for $ty { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.$meth_enc(self.to_le())?; Ok(core::mem::size_of::<$ty>()) } @@ -304,7 +304,7 @@ impl VarInt { impl Encodable for VarInt { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { match self.0 { 0..=0xFC => { (self.0 as u8).encode(s)?; @@ -334,11 +334,11 @@ impl Encodable for VarInt { impl Decodable for VarInt { #[inline] - fn decode(mut d: D) -> Result { - let n = ReadExt::read_u8(&mut d)?; + fn decode(d: &mut D) -> Result { + let n = ReadExt::read_u8(d)?; match n { 0xFF => { - let x = ReadExt::read_u64(&mut d)?; + let x = ReadExt::read_u64(d)?; if x < 0x100000000 { return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt")) } @@ -346,7 +346,7 @@ impl Decodable for VarInt { } 0xFE => { - let x = ReadExt::read_u32(&mut d)?; + let x = ReadExt::read_u32(d)?; if x < 0x10000 { return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt")) } @@ -354,7 +354,7 @@ impl Decodable for VarInt { } 0xFD => { - let x = ReadExt::read_u16(&mut d)?; + let x = ReadExt::read_u16(d)?; if x < 0xFD { return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt")) } @@ -371,10 +371,10 @@ macro_rules! tuple_encode { impl<$($x: Encodable),*> Encodable for ($($x),*) { #[inline] #[allow(non_snake_case)] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let &($(ref $x),*) = self; let mut len = 0; - $(len += $x.encode(&mut s)?;)* + $(len += $x.encode(s)?;)* Ok(len) } } @@ -382,8 +382,8 @@ macro_rules! tuple_encode { impl<$($x: Decodable),*> Decodable for ($($x),*) { #[inline] #[allow(non_snake_case)] - fn decode(mut d: D) -> Result { - Ok(($({let $x = Decodable::decode(&mut d)?; $x }),*)) + fn decode(d: &mut D) -> Result { + Ok(($({let $x = Decodable::decode(d)?; $x }),*)) } } ) @@ -406,7 +406,7 @@ macro_rules! encode_payload { // Implementations for some primitive types. impl Encodable for usize { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_u64(*self as u64)?; Ok(8) } @@ -414,14 +414,14 @@ impl Encodable for usize { impl Decodable for usize { #[inline] - fn decode(mut d: D) -> Result { - Ok(ReadExt::read_u64(&mut d)? as usize) + fn decode(d: &mut D) -> Result { + Ok(ReadExt::read_u64(d)? as usize) } } impl Encodable for f64 { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_f64(*self)?; Ok(core::mem::size_of::()) } @@ -429,14 +429,14 @@ impl Encodable for f64 { impl Decodable for f64 { #[inline] - fn decode(mut d: D) -> Result { - ReadExt::read_f64(&mut d) + fn decode(d: &mut D) -> Result { + ReadExt::read_f64(d) } } impl Encodable for f32 { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_f32(*self)?; Ok(core::mem::size_of::()) } @@ -444,14 +444,14 @@ impl Encodable for f32 { impl Decodable for f32 { #[inline] - fn decode(mut d: D) -> Result { - ReadExt::read_f32(&mut d) + fn decode(d: &mut D) -> Result { + ReadExt::read_f32(d) } } impl Encodable for bool { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_bool(*self)?; Ok(1) } @@ -459,18 +459,18 @@ impl Encodable for bool { impl Decodable for bool { #[inline] - fn decode(mut d: D) -> Result { - ReadExt::read_bool(&mut d) + fn decode(d: &mut D) -> Result { + ReadExt::read_bool(d) } } impl Encodable for Vec { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for val in self { - len += val.encode(&mut s)?; + len += val.encode(s)?; } Ok(len) } @@ -478,12 +478,12 @@ impl Encodable for Vec { impl Decodable for Vec { #[inline] - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = Vec::new(); ret.try_reserve(len as usize).map_err(|_| std::io::ErrorKind::InvalidData)?; for _ in 0..len { - ret.push(Decodable::decode(&mut d)?); + ret.push(Decodable::decode(d)?); } Ok(ret) } @@ -491,11 +491,11 @@ impl Decodable for Vec { impl Encodable for VecDeque { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for val in self { - len += val.encode(&mut s)?; + len += val.encode(s)?; } Ok(len) } @@ -503,34 +503,34 @@ impl Encodable for VecDeque { impl Decodable for VecDeque { #[inline] - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = VecDeque::new(); ret.try_reserve(len as usize).map_err(|_| std::io::ErrorKind::InvalidData)?; for _ in 0..len { - ret.push_back(Decodable::decode(&mut d)?); + ret.push_back(Decodable::decode(d)?); } Ok(ret) } } impl Encodable for Option { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; if let Some(v) = self { - len += true.encode(&mut s)?; - len += v.encode(&mut s)?; + len += true.encode(s)?; + len += v.encode(s)?; } else { - len += false.encode(&mut s)?; + len += false.encode(s)?; } Ok(len) } } impl Decodable for Option { - fn decode(mut d: D) -> Result { - let valid: bool = Decodable::decode(&mut d)?; - let val = if valid { Some(Decodable::decode(&mut d)?) } else { None }; + fn decode(d: &mut D) -> Result { + let valid: bool = Decodable::decode(d)?; + let val = if valid { Some(Decodable::decode(d)?) } else { None }; Ok(val) } } @@ -540,10 +540,10 @@ where T: Encodable, { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; for elem in self.iter() { - len += elem.encode(&mut s)?; + len += elem.encode(s)?; } Ok(len) } @@ -554,10 +554,10 @@ where T: Decodable + core::fmt::Debug, { #[inline] - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut ret = vec![]; for _ in 0..N { - ret.push(Decodable::decode(&mut d)?); + ret.push(Decodable::decode(d)?); } Ok(ret.try_into().unwrap()) @@ -566,10 +566,10 @@ where impl Encodable for String { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let b = self.as_bytes(); let b_len = b.len(); - let vi_len = VarInt(b_len as u64).encode(&mut s)?; + let vi_len = VarInt(b_len as u64).encode(s)?; s.write_slice(b)?; Ok(vi_len + b_len) } @@ -577,10 +577,10 @@ impl Encodable for String { impl Encodable for &str { #[inline] - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let b = self.as_bytes(); let b_len = b.len(); - let vi_len = VarInt(b_len as u64).encode(&mut s)?; + let vi_len = VarInt(b_len as u64).encode(s)?; s.write_slice(b)?; Ok(vi_len + b_len) } @@ -588,7 +588,7 @@ impl Encodable for &str { impl Decodable for String { #[inline] - fn decode(d: D) -> Result { + fn decode(d: &mut D) -> Result { match String::from_utf8(Decodable::decode(d)?) { Ok(v) => Ok(v), Err(_) => Err(Error::new(ErrorKind::Other, "Invalid UTF-8 for string")), diff --git a/src/serial/src/types/bridgetree.rs b/src/serial/src/types/bridgetree.rs index cb50a2ec0..28fb681de 100644 --- a/src/serial/src/types/bridgetree.rs +++ b/src/serial/src/types/bridgetree.rs @@ -29,8 +29,8 @@ use futures_lite::{AsyncRead, AsyncWrite}; use crate::{Decodable, Encodable}; impl Encodable for bridgetree::Position { - fn encode(&self, mut s: S) -> Result { - u64::from(*self).encode(&mut s) + fn encode(&self, s: &mut S) -> Result { + u64::from(*self).encode(s) } } @@ -43,8 +43,8 @@ impl AsyncEncodable for bridgetree::Position { } impl Decodable for bridgetree::Position { - fn decode(mut d: D) -> Result { - let dec: u64 = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let dec: u64 = Decodable::decode(d)?; Ok(Self::from(dec)) } } @@ -59,10 +59,10 @@ impl AsyncDecodable for bridgetree::Position { } impl Encodable for bridgetree::Address { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += u8::from(self.level()).encode(&mut s)?; - len += self.index().encode(&mut s)?; + len += u8::from(self.level()).encode(s)?; + len += self.index().encode(s)?; Ok(len) } } @@ -79,9 +79,9 @@ impl AsyncEncodable for bridgetree::Address { } impl Decodable for bridgetree::Address { - fn decode(mut d: D) -> Result { - let level: u8 = Decodable::decode(&mut d)?; - let index = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let level: u8 = Decodable::decode(d)?; + let index = Decodable::decode(d)?; Ok(Self::from_parts(level.into(), index)) } } @@ -97,11 +97,11 @@ impl AsyncDecodable for bridgetree::Address { } impl Encodable for bridgetree::NonEmptyFrontier { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += self.position().encode(&mut s)?; - len += self.leaf().encode(&mut s)?; - len += self.ommers().to_vec().encode(&mut s)?; + len += self.position().encode(s)?; + len += self.leaf().encode(s)?; + len += self.ommers().to_vec().encode(s)?; Ok(len) } } @@ -121,10 +121,10 @@ impl AsyncEncodable } impl Decodable for bridgetree::NonEmptyFrontier { - fn decode(mut d: D) -> Result { - let position = Decodable::decode(&mut d)?; - let leaf = Decodable::decode(&mut d)?; - let ommers = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let position = Decodable::decode(d)?; + let leaf = Decodable::decode(d)?; + let ommers = Decodable::decode(d)?; match Self::from_parts(position, leaf, ommers) { Ok(v) => Ok(v), @@ -149,12 +149,12 @@ impl AsyncDecodable for bridgetree::NonE } impl Encodable for bridgetree::MerkleBridge { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += self.prior_position().encode(&mut s)?; - len += self.tracking().encode(&mut s)?; - len += self.ommers().encode(&mut s)?; - len += self.frontier().encode(&mut s)?; + len += self.prior_position().encode(s)?; + len += self.tracking().encode(s)?; + len += self.ommers().encode(s)?; + len += self.frontier().encode(s)?; Ok(len) } } @@ -173,11 +173,11 @@ impl AsyncEncodable for bridgetre } impl Decodable for bridgetree::MerkleBridge { - fn decode(mut d: D) -> Result { - let prior_position = Decodable::decode(&mut d)?; - let tracking = Decodable::decode(&mut d)?; - let ommers = Decodable::decode(&mut d)?; - let frontier = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let prior_position = Decodable::decode(d)?; + let tracking = Decodable::decode(d)?; + let ommers = Decodable::decode(d)?; + let frontier = Decodable::decode(d)?; Ok(Self::from_parts(prior_position, tracking, ommers, frontier)) } } @@ -195,12 +195,12 @@ impl AsyncDecodable for bridgetree::Merk } impl Encodable for bridgetree::Checkpoint { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += self.id().encode(&mut s)?; - len += self.bridges_len().encode(&mut s)?; - len += self.marked().encode(&mut s)?; - len += self.forgotten().encode(&mut s)?; + len += self.id().encode(s)?; + len += self.bridges_len().encode(s)?; + len += self.marked().encode(s)?; + len += self.forgotten().encode(s)?; Ok(len) } } @@ -219,11 +219,11 @@ impl AsyncEncodable for bridgetree::Checkpoint { } impl Decodable for bridgetree::Checkpoint { - fn decode(mut d: D) -> Result { - let id = Decodable::decode(&mut d)?; - let bridges_len = Decodable::decode(&mut d)?; - let marked = Decodable::decode(&mut d)?; - let forgotten = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let id = Decodable::decode(d)?; + let bridges_len = Decodable::decode(d)?; + let marked = Decodable::decode(d)?; + let forgotten = Decodable::decode(d)?; Ok(Self::from_parts(id, bridges_len, marked, forgotten)) } } @@ -243,13 +243,13 @@ impl AsyncDecodable for bridgetree::Checkpoint { impl Encodable for bridgetree::BridgeTree { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += self.prior_bridges().to_vec().encode(&mut s)?; - len += self.current_bridge().encode(&mut s)?; - len += self.marked_indices().encode(&mut s)?; - len += self.checkpoints().encode(&mut s)?; - len += self.max_checkpoints().encode(&mut s)?; + len += self.prior_bridges().to_vec().encode(s)?; + len += self.current_bridge().encode(s)?; + len += self.marked_indices().encode(s)?; + len += self.checkpoints().encode(s)?; + len += self.max_checkpoints().encode(s)?; Ok(len) } } @@ -279,12 +279,12 @@ impl< const DEPTH: u8, > Decodable for bridgetree::BridgeTree { - fn decode(mut d: D) -> Result { - let prior_bridges = Decodable::decode(&mut d)?; - let current_bridge = Decodable::decode(&mut d)?; - let saved = Decodable::decode(&mut d)?; - let checkpoints = Decodable::decode(&mut d)?; - let max_checkpoints = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let prior_bridges = Decodable::decode(d)?; + let current_bridge = Decodable::decode(d)?; + let saved = Decodable::decode(d)?; + let checkpoints = Decodable::decode(d)?; + let max_checkpoints = Decodable::decode(d)?; match Self::from_parts(prior_bridges, current_bridge, saved, checkpoints, max_checkpoints) { Ok(v) => Ok(v), Err(_) => Err(Error::new(ErrorKind::Other, "BridgeTreeError")), diff --git a/src/serial/src/types/collections.rs b/src/serial/src/types/collections.rs index 748afbfba..3c067dbbf 100644 --- a/src/serial/src/types/collections.rs +++ b/src/serial/src/types/collections.rs @@ -32,11 +32,11 @@ use futures_lite::{AsyncRead, AsyncWrite}; use crate::{Decodable, Encodable, VarInt}; impl Encodable for HashSet { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for c in self.iter() { - len += c.encode(&mut s)?; + len += c.encode(s)?; } Ok(len) } @@ -56,11 +56,11 @@ impl AsyncEncodable for HashSet { } impl Decodable for HashSet { - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = HashSet::new(); for _ in 0..len { - let entry: T = Decodable::decode(&mut d)?; + let entry: T = Decodable::decode(d)?; ret.insert(entry); } Ok(ret) @@ -82,12 +82,12 @@ impl AsyncDecodable f } impl Encodable for BTreeMap { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for c in self.iter() { - len += c.0.encode(&mut s)?; - len += c.1.encode(&mut s)?; + len += c.0.encode(s)?; + len += c.1.encode(s)?; } Ok(len) } @@ -108,12 +108,12 @@ impl AsyncEncodable for BTre } impl Decodable for BTreeMap { - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = BTreeMap::new(); for _ in 0..len { - let key: T = Decodable::decode(&mut d)?; - let entry: U = Decodable::decode(&mut d)?; + let key: T = Decodable::decode(d)?; + let entry: U = Decodable::decode(d)?; ret.insert(key, entry); } Ok(ret) @@ -138,11 +138,11 @@ impl AsyncDe } impl Encodable for BTreeSet { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for c in self.iter() { - len += c.encode(&mut s)?; + len += c.encode(s)?; } Ok(len) } @@ -162,11 +162,11 @@ impl AsyncEncodable for BTreeSet { } impl Decodable for BTreeSet { - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = BTreeSet::new(); for _ in 0..len { - let key: T = Decodable::decode(&mut d)?; + let key: T = Decodable::decode(d)?; ret.insert(key); } Ok(ret) @@ -188,12 +188,12 @@ impl AsyncDecodable for BTreeSet { } impl Encodable for HashMap { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += VarInt(self.len() as u64).encode(&mut s)?; + len += VarInt(self.len() as u64).encode(s)?; for c in self.iter() { - len += c.0.encode(&mut s)?; - len += c.1.encode(&mut s)?; + len += c.0.encode(s)?; + len += c.1.encode(s)?; } Ok(len) } @@ -214,12 +214,12 @@ impl AsyncEncodable for Hash } impl Decodable for HashMap { - fn decode(mut d: D) -> Result { - let len = VarInt::decode(&mut d)?.0; + fn decode(d: &mut D) -> Result { + let len = VarInt::decode(d)?.0; let mut ret = HashMap::new(); for _ in 0..len { - let key: T = Decodable::decode(&mut d)?; - let entry: U = Decodable::decode(&mut d)?; + let key: T = Decodable::decode(d)?; + let entry: U = Decodable::decode(d)?; ret.insert(key, entry); } Ok(ret) diff --git a/src/serial/src/types/hash.rs b/src/serial/src/types/hash.rs index 21598eecf..7a192b38c 100644 --- a/src/serial/src/types/hash.rs +++ b/src/serial/src/types/hash.rs @@ -28,7 +28,7 @@ use crate::{Decodable, Encodable, ReadExt, WriteExt}; #[cfg(feature = "blake3")] impl Encodable for blake3::Hash { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_slice(self.as_bytes())?; Ok(blake3::OUT_LEN) } @@ -45,7 +45,7 @@ impl AsyncEncodable for blake3::Hash { #[cfg(feature = "blake3")] impl Decodable for blake3::Hash { - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut bytes = [0u8; blake3::OUT_LEN]; d.read_slice(&mut bytes)?; Ok(bytes.into()) diff --git a/src/serial/src/types/pasta.rs b/src/serial/src/types/pasta.rs index 46ded0ac1..0b2a713c2 100644 --- a/src/serial/src/types/pasta.rs +++ b/src/serial/src/types/pasta.rs @@ -37,7 +37,7 @@ use pasta_curves::{ use crate::{Decodable, Encodable, ReadExt, WriteExt}; impl Encodable for Fp { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_slice(&self.to_repr())?; Ok(32) } @@ -53,7 +53,7 @@ impl AsyncEncodable for Fp { } impl Decodable for Fp { - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut bytes = [0u8; 32]; d.read_slice(&mut bytes)?; match Self::from_repr(bytes).into() { @@ -76,7 +76,7 @@ impl AsyncDecodable for Fp { } impl Encodable for Fq { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_slice(&self.to_repr())?; Ok(32) } @@ -92,7 +92,7 @@ impl AsyncEncodable for Fq { } impl Decodable for Fq { - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut bytes = [0u8; 32]; d.read_slice(&mut bytes)?; match Self::from_repr(bytes).into() { @@ -116,7 +116,7 @@ impl AsyncDecodable for Fq { } impl Encodable for Ep { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_slice(&self.to_bytes())?; Ok(32) } @@ -132,7 +132,7 @@ impl AsyncEncodable for Ep { } impl Decodable for Ep { - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut bytes = [0u8; 32]; d.read_slice(&mut bytes)?; match Self::from_bytes(&bytes).into() { @@ -156,7 +156,7 @@ impl AsyncDecodable for Ep { } impl Encodable for Eq { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { s.write_slice(&self.to_bytes())?; Ok(32) } @@ -172,7 +172,7 @@ impl AsyncEncodable for Eq { } impl Decodable for Eq { - fn decode(mut d: D) -> Result { + fn decode(d: &mut D) -> Result { let mut bytes = [0u8; 32]; d.read_slice(&mut bytes)?; match Self::from_bytes(&bytes).into() { diff --git a/src/serial/src/types/semver.rs b/src/serial/src/types/semver.rs index b4244d501..5c77bb113 100644 --- a/src/serial/src/types/semver.rs +++ b/src/serial/src/types/semver.rs @@ -28,8 +28,8 @@ use futures_lite::{AsyncRead, AsyncWrite}; use crate::{Decodable, Encodable}; impl Encodable for semver::Prerelease { - fn encode(&self, mut s: S) -> Result { - self.as_str().encode(&mut s) + fn encode(&self, s: &mut S) -> Result { + self.as_str().encode(s) } } @@ -42,8 +42,8 @@ impl AsyncEncodable for semver::Prerelease { } impl Decodable for semver::Prerelease { - fn decode(mut d: D) -> Result { - let s: String = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let s: String = Decodable::decode(d)?; match Self::new(&s) { Ok(v) => Ok(v), @@ -66,8 +66,8 @@ impl AsyncDecodable for semver::Prerelease { } impl Encodable for semver::BuildMetadata { - fn encode(&self, mut s: S) -> Result { - self.as_str().encode(&mut s) + fn encode(&self, s: &mut S) -> Result { + self.as_str().encode(s) } } @@ -80,8 +80,8 @@ impl AsyncEncodable for semver::BuildMetadata { } impl Decodable for semver::BuildMetadata { - fn decode(mut d: D) -> Result { - let s: String = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let s: String = Decodable::decode(d)?; match Self::new(&s) { Ok(v) => Ok(v), @@ -108,13 +108,13 @@ impl AsyncDecodable for semver::BuildMetadata { } impl Encodable for semver::Version { - fn encode(&self, mut s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { let mut len = 0; - len += self.major.encode(&mut s)?; - len += self.minor.encode(&mut s)?; - len += self.patch.encode(&mut s)?; - len += self.pre.encode(&mut s)?; - len += self.build.encode(&mut s)?; + len += self.major.encode(s)?; + len += self.minor.encode(s)?; + len += self.patch.encode(s)?; + len += self.pre.encode(s)?; + len += self.build.encode(s)?; Ok(len) } } @@ -134,12 +134,12 @@ impl AsyncEncodable for semver::Version { } impl Decodable for semver::Version { - fn decode(mut d: D) -> Result { - let major: u64 = Decodable::decode(&mut d)?; - let minor: u64 = Decodable::decode(&mut d)?; - let patch: u64 = Decodable::decode(&mut d)?; - let pre: semver::Prerelease = Decodable::decode(&mut d)?; - let build: semver::BuildMetadata = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let major: u64 = Decodable::decode(d)?; + let minor: u64 = Decodable::decode(d)?; + let patch: u64 = Decodable::decode(d)?; + let pre: semver::Prerelease = Decodable::decode(d)?; + let build: semver::BuildMetadata = Decodable::decode(d)?; Ok(Self { major, minor, patch, pre, build }) } } diff --git a/src/serial/src/types/url.rs b/src/serial/src/types/url.rs index 8b99bfa57..0c78b4cf8 100644 --- a/src/serial/src/types/url.rs +++ b/src/serial/src/types/url.rs @@ -29,7 +29,7 @@ use futures_lite::{AsyncRead, AsyncWrite}; use crate::{Decodable, Encodable}; impl Encodable for Url { - fn encode(&self, s: S) -> Result { + fn encode(&self, s: &mut S) -> Result { self.as_str().encode(s) } } @@ -43,8 +43,8 @@ impl AsyncEncodable for Url { } impl Decodable for Url { - fn decode(mut d: D) -> Result { - let s: String = Decodable::decode(&mut d)?; + fn decode(d: &mut D) -> Result { + let s: String = Decodable::decode(d)?; match Url::parse(&s) { Ok(v) => Ok(v), Err(e) => Err(Error::new(ErrorKind::Other, e)),