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::Entry;
58 pub use crate::methods::storage_decoder::{
59 StorageKey, StorageKeyDecodeError, StorageKeyPart, StorageKeyPartValue,
60 StorageKeyValueDecodeError, StorageValueDecodeError,
61 decode_default_storage_value_with_info, decode_storage_key, decode_storage_key_values,
62 decode_storage_key_with_info, decode_storage_value, decode_storage_value_with_info,
63 };
64 pub use crate::methods::storage_encoder::{
65 StorageKeyEncodeError, encode_storage_key, encode_storage_key_prefix,
66 encode_storage_key_suffix, encode_storage_key_suffix_to,
67 encode_storage_key_suffix_with_info_to, encode_storage_key_to,
68 encode_storage_key_with_info, encode_storage_key_with_info_to,
69 };
70 pub use crate::methods::storage_type_info::{
71 StorageHasher, StorageInfo, StorageInfoError, StorageKeyInfo, StorageTypeInfo,
72 };
73 pub use crate::utils::{
74 DecodableValues, EncodableValues, IntoDecodableValues, IntoEncodableValues,
75 };
76}
77
78pub mod constants {
79 pub use crate::methods::Entry;
86 pub use crate::methods::constant_decoder::{
87 ConstantDecodeError, decode_constant, decode_constant_with_info,
88 };
89 pub use crate::methods::constant_type_info::{
90 ConstantInfo, ConstantInfoError, ConstantTypeInfo,
91 };
92}
93
94pub mod runtime_apis {
95 pub use crate::methods::Entry;
103 pub use crate::methods::runtime_api_decoder::{
104 RuntimeApiDecodeError, decode_runtime_api_response, decode_runtime_api_response_with_info,
105 };
106 pub use crate::methods::runtime_api_encoder::{
107 RuntimeApiInputsEncodeError, encode_runtime_api_inputs, encode_runtime_api_inputs_to,
108 encode_runtime_api_inputs_with_info_to, encode_runtime_api_name,
109 };
110 pub use crate::methods::runtime_api_type_info::{
111 RuntimeApiInfo, RuntimeApiInfoError, RuntimeApiInput, RuntimeApiTypeInfo,
112 };
113 pub use crate::utils::{EncodableValues, IntoEncodableValues};
114}
115
116pub mod view_functions {
117 pub use crate::methods::Entry;
125 pub use crate::methods::view_function_decoder::{
126 ViewFunctionDecodeError, decode_view_function_response,
127 decode_view_function_response_with_info,
128 };
129 pub use crate::methods::view_function_encoder::{
130 RUNTIME_API_NAME, ViewFunctionInputsEncodeError, encode_view_function_inputs,
131 encode_view_function_inputs_to, encode_view_function_inputs_with_info_to,
132 };
133 pub use crate::methods::view_function_type_info::{
134 ViewFunctionInfo, ViewFunctionInfoError, ViewFunctionInput, ViewFunctionTypeInfo,
135 };
136 pub use crate::utils::{EncodableValues, IntoEncodableValues};
137}
138
139pub mod custom_values {
140 pub use crate::methods::custom_value_decoder::{
147 CustomValueDecodeError, decode_custom_value, decode_custom_value_with_info,
148 };
149 pub use crate::methods::custom_value_type_info::{
150 CustomValue, CustomValueInfo, CustomValueInfoError, CustomValueTypeInfo,
151 };
152}
153
154#[cfg(feature = "legacy-types")]
155pub mod legacy_types {
156 pub mod polkadot {
159 pub fn relay_chain() -> scale_info_legacy::ChainTypeRegistry {
163 let bytes = include_bytes!("../types/polkadot_types.yaml");
166 serde_yaml::from_slice(bytes).expect("Polkadot types are valid YAML")
167 }
168 }
169}
170
171pub mod helpers {
172 pub use crate::utils::{
181 DecodableValues, DecodeErrorTrace, EncodableValues, IntoDecodableValues,
182 IntoEncodableValues, decode_with_error_tracing, list_storage_entries_any,
183 };
184 #[cfg(feature = "legacy")]
185 pub use crate::utils::{type_registry_from_metadata, type_registry_from_metadata_any};
186
187 pub use scale_decode::visitor::decode_with_visitor;
191
192 pub use scale_decode;
194}
195
196#[cfg(test)]
197mod test {
198 use crate::methods::extrinsic_type_info::ExtrinsicTypeInfo;
199 use crate::methods::runtime_api_type_info::RuntimeApiTypeInfo;
200 use crate::methods::storage_type_info::StorageTypeInfo;
201 use crate::methods::view_function_type_info::ViewFunctionTypeInfo;
202 use crate::utils::ToTypeRegistry;
203
204 #[test]
206 fn test_deserializing_legacy_types() {
207 let _ = crate::legacy_types::polkadot::relay_chain();
208 }
209
210 macro_rules! impls_trait {
211 ($type:ty, $trait:path) => {
212 const _: () = {
213 const fn assert_impl<T: $trait>() {}
214 assert_impl::<$type>();
215 };
216 };
217 }
218
219 #[rustfmt::skip]
223 const _: () = {
224 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ExtrinsicTypeInfo);
225 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ExtrinsicTypeInfo);
226 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ExtrinsicTypeInfo);
227 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ExtrinsicTypeInfo);
228 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ExtrinsicTypeInfo);
229 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ExtrinsicTypeInfo);
230 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, ExtrinsicTypeInfo);
231 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, ExtrinsicTypeInfo);
232 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ExtrinsicTypeInfo);
233
234 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, StorageTypeInfo);
235 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, StorageTypeInfo);
236 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, StorageTypeInfo);
237 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, StorageTypeInfo);
238 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, StorageTypeInfo);
239 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, StorageTypeInfo);
240 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, StorageTypeInfo);
241 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, StorageTypeInfo);
242 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, StorageTypeInfo);
243
244 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ViewFunctionTypeInfo);
248
249 impls_trait!(scale_info_legacy::TypeRegistry, RuntimeApiTypeInfo);
252 impls_trait!(scale_info_legacy::TypeRegistrySet, RuntimeApiTypeInfo);
253 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, RuntimeApiTypeInfo);
254 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, RuntimeApiTypeInfo);
255
256 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ToTypeRegistry);
258 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ToTypeRegistry);
259 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ToTypeRegistry);
260 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ToTypeRegistry);
261 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ToTypeRegistry);
262 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ToTypeRegistry);
263 };
264}