1#![deny(missing_docs)]
25#![cfg_attr(not(feature = "std"), no_std)]
26
27extern crate alloc;
28
29mod methods;
30mod utils;
31
32pub mod extrinsics {
33 pub use crate::methods::extrinsic_decoder::{
39 Extrinsic, ExtrinsicDecodeError, ExtrinsicExtensions, ExtrinsicOwned, ExtrinsicSignature,
40 ExtrinsicType, NamedArg, decode_extrinsic,
41 };
42 pub use crate::methods::extrinsic_type_info::{
43 ExtrinsicCallInfo, ExtrinsicExtensionInfo, ExtrinsicInfoArg, ExtrinsicInfoError,
44 ExtrinsicSignatureInfo, ExtrinsicTypeInfo,
45 };
46}
47
48pub mod storage {
49 pub use crate::methods::storage_decoder::{
58 StorageKey, StorageKeyDecodeError, StorageKeyPart, StorageKeyPartValue,
59 StorageKeyValueDecodeError, StorageValueDecodeError,
60 decode_default_storage_value_with_info, decode_storage_key, decode_storage_key_values,
61 decode_storage_key_with_info, decode_storage_value, decode_storage_value_with_info,
62 };
63 pub use crate::methods::storage_encoder::{
64 StorageKeyEncodeError, encode_storage_key, encode_storage_key_prefix,
65 encode_storage_key_suffix, encode_storage_key_suffix_to,
66 encode_storage_key_suffix_with_info_to, encode_storage_key_to,
67 encode_storage_key_with_info, encode_storage_key_with_info_to,
68 };
69 pub use crate::methods::storage_type_info::{
70 StorageEntry, StorageHasher, StorageInfo, StorageInfoError, StorageKeyInfo, StorageTypeInfo,
71 };
72 pub use crate::utils::{
73 DecodableValues, EncodableValues, IntoDecodableValues, IntoEncodableValues,
74 };
75}
76
77pub mod constants {
78 pub use crate::methods::constant_decoder::{
85 ConstantDecodeError, decode_constant, decode_constant_with_info,
86 };
87 pub use crate::methods::constant_type_info::{
88 Constant, ConstantInfo, ConstantInfoError, ConstantTypeInfo,
89 };
90}
91
92pub mod runtime_apis {
93 pub use crate::methods::runtime_api_decoder::{
101 RuntimeApiDecodeError, decode_runtime_api_response, decode_runtime_api_response_with_info,
102 };
103 pub use crate::methods::runtime_api_encoder::{
104 RuntimeApiInputsEncodeError, encode_runtime_api_inputs, encode_runtime_api_inputs_to,
105 encode_runtime_api_inputs_with_info_to, encode_runtime_api_name,
106 };
107 pub use crate::methods::runtime_api_type_info::{
108 RuntimeApi, RuntimeApiInfo, RuntimeApiInfoError, RuntimeApiInput, RuntimeApiTypeInfo,
109 };
110 pub use crate::utils::{EncodableValues, IntoEncodableValues};
111}
112
113pub mod view_functions {
114 pub use crate::methods::view_function_decoder::{
122 ViewFunctionDecodeError, decode_view_function_response,
123 decode_view_function_response_with_info,
124 };
125 pub use crate::methods::view_function_encoder::{
126 RUNTIME_API_NAME, ViewFunctionInputsEncodeError, encode_view_function_inputs,
127 encode_view_function_inputs_to, encode_view_function_inputs_with_info_to,
128 };
129 pub use crate::methods::view_function_type_info::{
130 ViewFunction, ViewFunctionInfo, ViewFunctionInfoError, ViewFunctionInput,
131 ViewFunctionTypeInfo,
132 };
133 pub use crate::utils::{EncodableValues, IntoEncodableValues};
134}
135
136pub mod custom_values {
137 pub use crate::methods::custom_value_decoder::{
144 CustomValueDecodeError, decode_custom_value, decode_custom_value_with_info,
145 };
146 pub use crate::methods::custom_value_type_info::{
147 CustomValue, CustomValueInfo, CustomValueInfoError, CustomValueTypeInfo,
148 };
149}
150
151#[cfg(feature = "legacy-types")]
152pub mod legacy_types {
153 pub mod polkadot {
156 pub fn relay_chain() -> scale_info_legacy::ChainTypeRegistry {
160 let bytes = include_bytes!("../types/polkadot_types.yaml");
163 serde_yaml::from_slice(bytes).expect("Polkadot types are valid YAML")
164 }
165 }
166}
167
168pub mod helpers {
169 pub use crate::utils::{
178 DecodableValues, DecodeErrorTrace, EncodableValues, IntoDecodableValues,
179 IntoEncodableValues, decode_with_error_tracing, list_storage_entries_any,
180 };
181 #[cfg(feature = "legacy")]
182 pub use crate::utils::{type_registry_from_metadata, type_registry_from_metadata_any};
183
184 pub use scale_decode::visitor::decode_with_visitor;
188
189 pub use scale_decode;
191}
192
193#[cfg(test)]
194mod test {
195 use crate::methods::extrinsic_type_info::ExtrinsicTypeInfo;
196 use crate::methods::runtime_api_type_info::RuntimeApiTypeInfo;
197 use crate::methods::storage_type_info::StorageTypeInfo;
198 use crate::methods::view_function_type_info::ViewFunctionTypeInfo;
199 use crate::utils::ToTypeRegistry;
200
201 #[test]
203 fn test_deserializing_legacy_types() {
204 let _ = crate::legacy_types::polkadot::relay_chain();
205 }
206
207 macro_rules! impls_trait {
208 ($type:ty, $trait:path) => {
209 const _: () = {
210 const fn assert_impl<T: $trait>() {}
211 assert_impl::<$type>();
212 };
213 };
214 }
215
216 #[rustfmt::skip]
220 const _: () = {
221 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ExtrinsicTypeInfo);
222 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ExtrinsicTypeInfo);
223 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ExtrinsicTypeInfo);
224 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ExtrinsicTypeInfo);
225 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ExtrinsicTypeInfo);
226 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ExtrinsicTypeInfo);
227 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, ExtrinsicTypeInfo);
228 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, ExtrinsicTypeInfo);
229 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ExtrinsicTypeInfo);
230
231 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, StorageTypeInfo);
232 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, StorageTypeInfo);
233 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, StorageTypeInfo);
234 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, StorageTypeInfo);
235 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, StorageTypeInfo);
236 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, StorageTypeInfo);
237 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, StorageTypeInfo);
238 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, StorageTypeInfo);
239 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, StorageTypeInfo);
240
241 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ViewFunctionTypeInfo);
245
246 impls_trait!(scale_info_legacy::TypeRegistry, RuntimeApiTypeInfo);
249 impls_trait!(scale_info_legacy::TypeRegistrySet, RuntimeApiTypeInfo);
250 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, RuntimeApiTypeInfo);
251 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, RuntimeApiTypeInfo);
252
253 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ToTypeRegistry);
255 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ToTypeRegistry);
256 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ToTypeRegistry);
257 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ToTypeRegistry);
258 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ToTypeRegistry);
259 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ToTypeRegistry);
260 };
261}