Skip to content

Commit 342f781

Browse files
committed
Allow deserialize_seq to deserialize binaries.
1 parent c9849a7 commit 342f781

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

rustler/src/serde/de.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::serde::{atoms, error::Error, util};
22
use crate::{
3-
types::{ListIterator, MapIterator},
3+
types::{Encoder, ListIterator, MapIterator},
44
Term, TermType,
55
};
66
use serde::{
@@ -325,12 +325,22 @@ impl<'de, 'a: 'de> de::Deserializer<'de> for Deserializer<'a> {
325325
where
326326
V: Visitor<'de>,
327327
{
328-
if !(self.term.is_list() | self.term.is_empty_list()) {
328+
if self.term.is_list() | self.term.is_empty_list() {
329+
let iter: ListIterator = self.term.decode().or(Err(Error::ExpectedList))?;
330+
visitor.visit_seq(SequenceDeserializer::new(iter))
331+
} else if self.term.is_binary() {
332+
let binary = self
333+
.term
334+
.decode_as_binary()
335+
.or(Err(Error::ExpectedBinary))?;
336+
let iter = binary
337+
.as_slice()
338+
.iter()
339+
.map(|x| x.encode(self.term.get_env()));
340+
visitor.visit_seq(SequenceDeserializer::new(iter))
341+
} else {
329342
return Err(Error::ExpectedList);
330343
}
331-
332-
let iter: ListIterator = self.term.decode().or(Err(Error::ExpectedList))?;
333-
visitor.visit_seq(SequenceDeserializer::new(iter))
334344
}
335345

336346
#[inline]

0 commit comments

Comments
 (0)