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}