From 85aff7cbd76cebe1247908f2e9510b21d7e8080d Mon Sep 17 00:00:00 2001 From: NikVolf Date: Wed, 14 Feb 2018 18:45:32 +0300 Subject: [PATCH] Dedicated serialize/deserialze for Func struct --- src/elements/func.rs | 16 ++++++++++++++++ src/elements/section.rs | 7 ++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/elements/func.rs b/src/elements/func.rs index 6630e00..4aa3bbc 100644 --- a/src/elements/func.rs +++ b/src/elements/func.rs @@ -23,6 +23,22 @@ impl Func { } } +impl Serialize for Func { + type Error = Error; + + fn serialize(self, writer: &mut W) -> Result<(), Self::Error> { + VarUint32::from(self.0).serialize(writer) + } +} + +impl Deserialize for Func { + type Error = Error; + + fn deserialize(reader: &mut R) -> Result { + Ok(Func(VarUint32::deserialize(reader)?.into())) + } +} + /// Local definition inside the function body. #[derive(Debug, Copy, Clone)] pub struct Local { diff --git a/src/elements/section.rs b/src/elements/section.rs index f2b8061..640cdf7 100644 --- a/src/elements/section.rs +++ b/src/elements/section.rs @@ -398,11 +398,8 @@ impl Deserialize for FunctionSection { fn deserialize(reader: &mut R) -> Result { // todo: maybe use reader.take(section_length) let _section_length = VarUint32::deserialize(reader)?; - let funcs: Vec = CountedList::::deserialize(reader)? - .into_inner() - .into_iter() - .map(|f| Func::new(f.into())) - .collect(); + let funcs: Vec = CountedList::::deserialize(reader)? + .into_inner(); Ok(FunctionSection(funcs)) } }