workflow_serializer/
payload.rs1use crate::serializer::{Deserializer, Serializer};
2use crate::{load, store};
3use std::io::Cursor;
4
5pub mod ser {
7 use super::*;
8
9 #[repr(transparent)]
11 pub struct Payload<'a, T>(pub &'a T)
12 where
13 T: Serializer;
14
15 impl<T> Serializer for Payload<'_, T>
16 where
17 T: Serializer,
18 {
19 fn serialize<W: std::io::Write>(&self, target: &mut W) -> std::io::Result<()> {
20 let mut payload = Vec::<u8>::new();
21 let mut writer = Cursor::new(&mut payload);
22 self.0.serialize(&mut writer)?;
23 store!(Vec<u8>, &payload, target)?;
24 Ok(())
25 }
26 }
27}
28
29pub mod de {
31 use super::*;
32
33 #[repr(transparent)]
35 pub struct Payload<T>(pub T)
36 where
37 T: Deserializer;
38
39 impl<T> Deserializer for Payload<T>
40 where
41 T: Deserializer,
42 {
43 fn deserialize<R: borsh::io::Read>(source: &mut R) -> std::io::Result<Self> {
44 let payload = load!(Vec::<u8>, source)?;
45 let mut reader = Cursor::new(payload);
46 let inner = T::deserialize(&mut reader)?;
47 Ok(Payload(inner))
48 }
49 }
50
51 impl<T> Payload<T>
52 where
53 T: Deserializer,
54 {
55 pub fn into_inner(self) -> T {
57 self.0
58 }
59 }
60}