Guest User

Untitled

a guest
Nov 18th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. impl<'de, T> Deserialize<'de> for Message<T>
  2. where
  3. T: Deserialize<'de>,
  4. {
  5. fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  6. where
  7. D: Deserializer<'de>,
  8. {
  9. struct Visitor<'de, T>(PhantomData<T>, PhantomData<&'de ()>);
  10. impl<'de, T> serde::de::Visitor<'de> for Visitor<'de, T>
  11. where
  12. T: Deserialize<'de>,
  13. {
  14. type Value = Message<T>;
  15. fn expecting(
  16. &self,
  17. formatter: &mut serde::export::Formatter,
  18. ) -> serde::export::fmt::Result {
  19. serde::export::Formatter::write_str(formatter, "Message")
  20. }
  21. #[inline]
  22. fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
  23. where
  24. A: SeqAccess<'de>,
  25. {
  26. // Custom error here if the magic number is not correct
  27. let magic_number = seq.next_element::<u32>()?;
  28. let data = seq.next_element::<T>()?;
  29. let data = data.unwrap();
  30. Ok(Message { data })
  31. }
  32. }
  33. deserializer.deserialize_tuple_struct("Message", 2, Visitor(PhantomData, PhantomData))
  34. }
  35. }
Add Comment
Please, Sign In to add comment