mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-06 07:58:02 +00:00
a2b8dde5e6
* Add Static type which defers to Encode/Decode and impls EncodeAsType/DecodeAsType * rename to static_type and impl Deref/Mut * Improve type substitution in codegen so that concrete types can be swapped in * A couple of comment tweaks and no need for a macro export * Extend type substitution logic to work recursively on destination type * cargo fmt * Fix a couple of comments * update ui test outpuot * Add docs and missing_docs lint * Add test for replacing multiple of Ident * Update codegen/src/error.rs Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com> * update copyright year and fix ui test * simplify another error --------- Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com>
52 lines
1.6 KiB
Rust
52 lines
1.6 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
use super::Metadata;
|
|
use crate::error::Error;
|
|
|
|
/// This trait is implemented for all types that also implement [`scale_decode::DecodeAsType`].
|
|
pub trait DecodeWithMetadata: Sized {
|
|
/// Given some metadata and a type ID, attempt to SCALE decode the provided bytes into `Self`.
|
|
fn decode_with_metadata(
|
|
bytes: &mut &[u8],
|
|
type_id: u32,
|
|
metadata: &Metadata,
|
|
) -> Result<Self, Error>;
|
|
}
|
|
|
|
impl<T: scale_decode::DecodeAsType> DecodeWithMetadata for T {
|
|
fn decode_with_metadata(
|
|
bytes: &mut &[u8],
|
|
type_id: u32,
|
|
metadata: &Metadata,
|
|
) -> Result<T, Error> {
|
|
let val = T::decode_as_type(bytes, type_id, metadata.types())?;
|
|
Ok(val)
|
|
}
|
|
}
|
|
|
|
/// This trait is implemented for all types that also implement [`scale_encode::EncodeAsType`].
|
|
pub trait EncodeWithMetadata {
|
|
/// SCALE encode this type to bytes, possibly with the help of metadata.
|
|
fn encode_with_metadata(
|
|
&self,
|
|
type_id: u32,
|
|
metadata: &Metadata,
|
|
bytes: &mut Vec<u8>,
|
|
) -> Result<(), Error>;
|
|
}
|
|
|
|
impl<T: scale_encode::EncodeAsType> EncodeWithMetadata for T {
|
|
/// SCALE encode this type to bytes, possibly with the help of metadata.
|
|
fn encode_with_metadata(
|
|
&self,
|
|
type_id: u32,
|
|
metadata: &Metadata,
|
|
bytes: &mut Vec<u8>,
|
|
) -> Result<(), Error> {
|
|
self.encode_as_type_to(type_id, metadata.types(), bytes)?;
|
|
Ok(())
|
|
}
|
|
}
|