diff --git a/implementations/rust/src/lib.rs b/implementations/rust/src/lib.rs index ad92362..ad97d9c 100644 --- a/implementations/rust/src/lib.rs +++ b/implementations/rust/src/lib.rs @@ -402,7 +402,7 @@ mod samples_tests { placeholders.insert(0, Value::symbol("SimpleValue")); let v_bytes_1 = Codec::new(placeholders.clone()).encode_bytes(&w).unwrap(); let mut v_bytes_2 = Vec::new(); - v.serialize(&mut crate::ser::Serializer::new(&mut v_bytes_2, placeholders)).unwrap(); + v.serialize(&mut crate::ser::Serializer::new(&mut v_bytes_2, &placeholders)).unwrap(); println!("== w bytes = {:?}", v_bytes_1); println!("== v bytes = {:?}", v_bytes_2); assert_eq!(v_bytes_1, v_bytes_2); diff --git a/implementations/rust/src/ser.rs b/implementations/rust/src/ser.rs index 5ba759d..1e78760 100644 --- a/implementations/rust/src/ser.rs +++ b/implementations/rust/src/ser.rs @@ -14,15 +14,15 @@ pub struct Error { inner: writer::Error, } -impl std::convert::From for Error { - fn from(inner: writer::Error) -> Self { - Error { inner } +impl std::convert::From for writer::Error { + fn from(e: Error) -> Self { + e.inner } } -impl std::convert::From> for Error { - fn from(_inner: crate::value::error::Error) -> Self { - magic_error() +impl std::convert::From for Error { + fn from(inner: writer::Error) -> Self { + Error { inner } } } @@ -47,7 +47,7 @@ pub struct Serializer, D: Domain> { } impl, D: Domain> Serializer { - pub fn new(write: W, placeholders: DecodePlaceholderMap) -> Self { + pub fn new(write: W, placeholders: &DecodePlaceholderMap) -> Self { Serializer { write, placeholders: Some(invert_map(&placeholders)) } } @@ -57,9 +57,7 @@ impl, D: Domain> Serializer { None => Ok(self.write.write_symbol(s)?), } } -} -impl Serializer, NullDomain> { pub fn without_placeholders(write: W) -> Self { Serializer { write, placeholders: None } } @@ -71,11 +69,6 @@ pub struct SerializeCompound<'a, W: Writer, N: NestedValue, D: Domain> { count: Option, } -fn magic_error() -> Error { - Error { inner: writer::Error::new(std::io::ErrorKind::InvalidData, - "Internal error handling magic Value encoding") } -} - impl<'a, W: Writer, N: NestedValue, D: Domain> serde::Serializer for &'a mut Serializer { type Ok = (); type Error = Error; @@ -399,6 +392,7 @@ impl<'a, W: Writer, N: NestedValue, D: Domain> serde::ser::SerializeSeq for S } pub fn to_writer(write: W, value: &T) -> Result<()> { - let mut ser = Serializer::without_placeholders(write); + let mut ser: Serializer, NullDomain> = + Serializer::without_placeholders(write); value.serialize(&mut ser) }