Skip to content

Commit 20b81fd

Browse files
committed
Allow deserialize_seq to deserialize binaries.
1 parent c9849a7 commit 20b81fd

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

rustler/src/serde/de.rs

Lines changed: 9 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,16 @@ 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.term.decode_as_binary().expect("Term should be a binary");
333+
let iter = binary.as_slice().iter().map(|x| x.encode(self.term.get_env()));
334+
visitor.visit_seq(SequenceDeserializer::new(iter))
335+
} else {
329336
return Err(Error::ExpectedList);
330337
}
331-
332-
let iter: ListIterator = self.term.decode().or(Err(Error::ExpectedList))?;
333-
visitor.visit_seq(SequenceDeserializer::new(iter))
334338
}
335339

336340
#[inline]

0 commit comments

Comments
 (0)