Skip to content

Commit 6236870

Browse files
committed
fix: change RowBinaryDeserializer::deserialize_map for top-level maps
1 parent 254425a commit 6236870

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/rowbinary/de.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ where
6161
{
6262
input: &'cursor mut &'data [u8],
6363
validator: V,
64+
is_inner: bool,
6465
_marker: PhantomData<R>,
6566
}
6667

@@ -72,6 +73,7 @@ where
7273
Self {
7374
input,
7475
validator,
76+
is_inner: false,
7577
_marker: PhantomData,
7678
}
7779
}
@@ -83,6 +85,7 @@ where
8385
RowBinaryDeserializer {
8486
input: self.input,
8587
validator: self.validator.validate(serde_type),
88+
is_inner: true,
8689
_marker: PhantomData,
8790
}
8891
}
@@ -263,12 +266,19 @@ where
263266

264267
#[inline(always)]
265268
fn deserialize_map<V: Visitor<'data>>(self, visitor: V) -> Result<V::Value> {
266-
let len = self.read_size()?;
267-
let deserializer = &mut self.inner(SerdeType::Map(len));
268-
visitor.visit_map(RowBinaryMapAccess {
269-
deserializer,
270-
remaining: len,
271-
})
269+
if self.is_inner {
270+
let len = self.read_size()?;
271+
let deserializer = &mut self.inner(SerdeType::Map(len));
272+
visitor.visit_map(RowBinaryMapAccess {
273+
deserializer,
274+
remaining: len,
275+
})
276+
} else {
277+
visitor.visit_map(RowBinaryStructAsMapAccess {
278+
deserializer: self,
279+
current_field_idx: 0,
280+
})
281+
}
272282
}
273283

274284
#[inline(always)]
@@ -278,6 +288,7 @@ where
278288
fields: &'static [&'static str],
279289
visitor: V,
280290
) -> Result<V::Value> {
291+
self.is_inner = true;
281292
if !self.validator.is_field_order_wrong() {
282293
visitor.visit_seq(RowBinarySeqAccess {
283294
deserializer: self,

0 commit comments

Comments
 (0)