subxt_core/metadata/
decode_encode_traits.rs1use super::Metadata;
6
7use alloc::vec::Vec;
8
9pub trait DecodeWithMetadata: Sized {
11 fn decode_with_metadata(
13 bytes: &mut &[u8],
14 type_id: u32,
15 metadata: &Metadata,
16 ) -> Result<Self, scale_decode::Error>;
17}
18
19impl<T: scale_decode::DecodeAsType> DecodeWithMetadata for T {
20 fn decode_with_metadata(
21 bytes: &mut &[u8],
22 type_id: u32,
23 metadata: &Metadata,
24 ) -> Result<T, scale_decode::Error> {
25 let val = T::decode_as_type(bytes, type_id, metadata.types())?;
26 Ok(val)
27 }
28}
29
30pub trait EncodeWithMetadata {
32 fn encode_with_metadata(
34 &self,
35 type_id: u32,
36 metadata: &Metadata,
37 bytes: &mut Vec<u8>,
38 ) -> Result<(), scale_encode::Error>;
39}
40
41impl<T: scale_encode::EncodeAsType> EncodeWithMetadata for T {
42 fn encode_with_metadata(
44 &self,
45 type_id: u32,
46 metadata: &Metadata,
47 bytes: &mut Vec<u8>,
48 ) -> Result<(), scale_encode::Error> {
49 self.encode_as_type_to(type_id, metadata.types(), bytes)?;
50 Ok(())
51 }
52}