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::{
60 StorageKey, StorageKeyDecodeError, StorageKeyPart, StorageKeyPartValue,
61 StorageKeyValueDecodeError, StorageValueDecodeError,
62 decode_default_storage_value_with_info, decode_storage_key, decode_storage_key_values,
63 decode_storage_key_with_info, decode_storage_value, decode_storage_value_with_info,
64 };
65 pub use crate::methods::storage_encoder::{
66 StorageKeyEncodeError, encode_storage_key, encode_storage_key_prefix,
67 encode_storage_key_suffix, encode_storage_key_suffix_to,
68 encode_storage_key_suffix_with_info_to, encode_storage_key_to,
69 encode_storage_key_with_info, encode_storage_key_with_info_to,
70 };
71 pub use crate::methods::storage_type_info::{
72 StorageEntry, StorageEntryInfo, StorageHasher, StorageInfo, StorageInfoError,
73 StorageKeyInfo, StorageTypeInfo,
74 };
75 pub use crate::utils::{
76 DecodableValues, EncodableValues, IntoDecodableValues, IntoEncodableValues,
77 };
78}
79
80pub mod constants {
81 pub use crate::methods::constant_decoder::{
90 ConstantDecodeError, decode_constant, decode_constant_with_info,
91 };
92 pub use crate::methods::constant_type_info::{
93 ConstantEntry, ConstantEntryInfo, ConstantInfo, ConstantInfoError, ConstantTypeInfo,
94 };
95}
96
97pub mod runtime_apis {
98 pub use crate::methods::runtime_api_decoder::{
108 RuntimeApiDecodeError, decode_runtime_api_response, decode_runtime_api_response_with_info,
109 };
110 pub use crate::methods::runtime_api_encoder::{
111 RuntimeApiInputsEncodeError, encode_runtime_api_inputs, encode_runtime_api_inputs_to,
112 encode_runtime_api_inputs_with_info_to, encode_runtime_api_name,
113 };
114 pub use crate::methods::runtime_api_type_info::{
115 RuntimeApiEntry, RuntimeApiEntryInfo, RuntimeApiInfo, RuntimeApiInfoError, RuntimeApiInput,
116 RuntimeApiTypeInfo,
117 };
118 pub use crate::utils::{EncodableValues, IntoEncodableValues};
119}
120
121pub mod view_functions {
122 pub use crate::methods::view_function_decoder::{
132 ViewFunctionDecodeError, decode_view_function_response,
133 decode_view_function_response_with_info,
134 };
135 pub use crate::methods::view_function_encoder::{
136 RUNTIME_API_NAME, ViewFunctionInputsEncodeError, encode_view_function_inputs,
137 encode_view_function_inputs_to, encode_view_function_inputs_with_info_to,
138 };
139 pub use crate::methods::view_function_type_info::{
140 ViewFunctionEntry, ViewFunctionEntryInfo, ViewFunctionInfo, ViewFunctionInfoError,
141 ViewFunctionInput, ViewFunctionTypeInfo,
142 };
143 pub use crate::utils::{EncodableValues, IntoEncodableValues};
144}
145
146pub mod custom_values {
147 pub use crate::methods::custom_value_decoder::{
156 CustomValueDecodeError, decode_custom_value, decode_custom_value_with_info,
157 };
158 pub use crate::methods::custom_value_type_info::{
159 CustomValue, CustomValueEntryInfo, CustomValueInfo, CustomValueInfoError,
160 CustomValueTypeInfo,
161 };
162}
163
164#[cfg(feature = "legacy-types")]
165pub mod legacy_types {
166 pub mod polkadot {
169 pub fn relay_chain() -> scale_info_legacy::ChainTypeRegistry {
173 let bytes = include_bytes!("../types/polkadot_relay_types.yaml");
176 serde_yaml::from_slice(bytes).expect("Polkadot RC types are valid YAML")
177 }
178 }
179
180 #[doc(hidden)]
182 pub mod kusama {
183 pub fn relay_chain() -> scale_info_legacy::ChainTypeRegistry {
187 let bytes = include_bytes!("../types/kusama_relay_types.yaml");
190 serde_yaml::from_slice(bytes).expect("Kusama RC types are valid YAML")
191 }
192
193 pub fn asset_hub() -> scale_info_legacy::ChainTypeRegistry {
195 let bytes = include_bytes!("../types/kusama_assethub_types.yaml");
198 serde_yaml::from_slice(bytes).expect("Kusama AssetHub types are valid YAML")
199 }
200 }
201}
202
203pub mod helpers {
204 pub use crate::methods::Entry;
213
214 pub use crate::utils::{
215 DecodableValues, DecodeErrorTrace, EncodableValues, IntoDecodableValues,
216 IntoEncodableValues, decode_with_error_tracing,
217 };
218 #[cfg(feature = "legacy")]
219 pub use crate::utils::{type_registry_from_metadata, type_registry_from_metadata_any};
220
221 pub use scale_decode::visitor::decode_with_visitor;
225
226 pub use scale_decode;
228}
229
230#[cfg(test)]
231mod test {
232 use crate::methods::extrinsic_type_info::ExtrinsicTypeInfo;
233 use crate::methods::runtime_api_type_info::RuntimeApiTypeInfo;
234 use crate::methods::storage_type_info::StorageTypeInfo;
235 use crate::methods::view_function_type_info::ViewFunctionTypeInfo;
236 use crate::utils::ToTypeRegistry;
237
238 #[test]
240 fn test_deserializing_legacy_types() {
241 let _ = crate::legacy_types::polkadot::relay_chain();
242 let _ = crate::legacy_types::kusama::relay_chain();
243 let _ = crate::legacy_types::kusama::asset_hub();
244 }
245
246 macro_rules! impls_trait {
247 ($type:ty, $trait:path) => {
248 const _: () = {
249 const fn assert_impl<T: $trait>() {}
250 assert_impl::<$type>();
251 };
252 };
253 }
254
255 #[rustfmt::skip]
259 const _: () = {
260 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ExtrinsicTypeInfo);
261 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ExtrinsicTypeInfo);
262 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ExtrinsicTypeInfo);
263 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ExtrinsicTypeInfo);
264 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ExtrinsicTypeInfo);
265 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ExtrinsicTypeInfo);
266 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, ExtrinsicTypeInfo);
267 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, ExtrinsicTypeInfo);
268 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ExtrinsicTypeInfo);
269
270 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, StorageTypeInfo);
271 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, StorageTypeInfo);
272 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, StorageTypeInfo);
273 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, StorageTypeInfo);
274 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, StorageTypeInfo);
275 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, StorageTypeInfo);
276 impls_trait!(frame_metadata::v14::RuntimeMetadataV14, StorageTypeInfo);
277 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, StorageTypeInfo);
278 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, StorageTypeInfo);
279
280 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, ViewFunctionTypeInfo);
284
285 impls_trait!(scale_info_legacy::TypeRegistry, RuntimeApiTypeInfo);
288 impls_trait!(scale_info_legacy::TypeRegistrySet, RuntimeApiTypeInfo);
289 impls_trait!(frame_metadata::v15::RuntimeMetadataV15, RuntimeApiTypeInfo);
290 impls_trait!(frame_metadata::v16::RuntimeMetadataV16, RuntimeApiTypeInfo);
291
292 impls_trait!(frame_metadata::v8::RuntimeMetadataV8, ToTypeRegistry);
294 impls_trait!(frame_metadata::v9::RuntimeMetadataV9, ToTypeRegistry);
295 impls_trait!(frame_metadata::v10::RuntimeMetadataV10, ToTypeRegistry);
296 impls_trait!(frame_metadata::v11::RuntimeMetadataV11, ToTypeRegistry);
297 impls_trait!(frame_metadata::v12::RuntimeMetadataV12, ToTypeRegistry);
298 impls_trait!(frame_metadata::v13::RuntimeMetadataV13, ToTypeRegistry);
299 };
300}