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)) } }