diff --git a/rust/candid/src/de.rs b/rust/candid/src/de.rs index 33bb9529..4fd6652e 100644 --- a/rust/candid/src/de.rs +++ b/rust/candid/src/de.rs @@ -1128,6 +1128,14 @@ impl<'de, 'a> de::SeqAccess<'de> for Compound<'a, 'de> { _ => Err(Error::subtype("expect vector or tuple")), } } + + fn size_hint(&self) -> Option { + match &self.style { + Style::Vector { len, .. } => Some(*len), + Style::Struct { expect, wire, .. } => Some(expect.len().min(wire.len())), + _ => None, + } + } } impl<'de, 'a> de::MapAccess<'de> for Compound<'a, 'de> { @@ -1221,6 +1229,14 @@ impl<'de, 'a> de::MapAccess<'de> for Compound<'a, 'de> { } } } + + fn size_hint(&self) -> Option { + match &self.style { + Style::Map { len, .. } => Some(*len), + Style::Struct { expect, wire, .. } => Some(expect.len().min(wire.len())), + _ => None, + } + } } impl<'de, 'a> de::EnumAccess<'de> for Compound<'a, 'de> {