subxt_metadata/from/
mod.rs

1// Copyright 2019-2025 Parity Technologies (UK) Ltd.
2// This file is dual-licensed as Apache-2.0 or GPL-3.0.
3// see LICENSE for license details.
4
5use alloc::string::String;
6use thiserror::Error as DeriveError;
7mod v14;
8mod v15;
9mod v16;
10
11/// The metadata versions that we support converting into [`crate::Metadata`].
12/// These are ordest from highest to lowest, so that the metadata we'd want to
13/// pick first is first in the array.
14pub const SUPPORTED_METADATA_VERSIONS: [u32; 3] = [16, 15, 14];
15
16/// An error emitted if something goes wrong converting [`frame_metadata`]
17/// types into [`crate::Metadata`].
18#[derive(Debug, PartialEq, Eq, DeriveError)]
19#[non_exhaustive]
20pub enum TryFromError {
21    /// Type missing from type registry
22    #[error("Type id {0} is expected but not found in the type registry")]
23    TypeNotFound(u32),
24    /// Type was not a variant/enum type
25    #[error("Type {0} was not a variant/enum type, but is expected to be one")]
26    VariantExpected(u32),
27    /// An unsupported metadata version was provided.
28    #[error("Cannot convert v{0} metadata into Metadata type")]
29    UnsupportedMetadataVersion(u32),
30    /// Type name missing from type registry
31    #[error("Type name {0} is expected but not found in the type registry")]
32    TypeNameNotFound(String),
33    /// Invalid type path.
34    #[error("Type has an invalid path {0}")]
35    InvalidTypePath(String),
36}
37
38impl TryFrom<frame_metadata::RuntimeMetadataPrefixed> for crate::Metadata {
39    type Error = TryFromError;
40
41    fn try_from(value: frame_metadata::RuntimeMetadataPrefixed) -> Result<Self, Self::Error> {
42        match value.1 {
43            frame_metadata::RuntimeMetadata::V0(_) => {
44                Err(TryFromError::UnsupportedMetadataVersion(0))
45            }
46            frame_metadata::RuntimeMetadata::V1(_) => {
47                Err(TryFromError::UnsupportedMetadataVersion(1))
48            }
49            frame_metadata::RuntimeMetadata::V2(_) => {
50                Err(TryFromError::UnsupportedMetadataVersion(2))
51            }
52            frame_metadata::RuntimeMetadata::V3(_) => {
53                Err(TryFromError::UnsupportedMetadataVersion(3))
54            }
55            frame_metadata::RuntimeMetadata::V4(_) => {
56                Err(TryFromError::UnsupportedMetadataVersion(4))
57            }
58            frame_metadata::RuntimeMetadata::V5(_) => {
59                Err(TryFromError::UnsupportedMetadataVersion(5))
60            }
61            frame_metadata::RuntimeMetadata::V6(_) => {
62                Err(TryFromError::UnsupportedMetadataVersion(6))
63            }
64            frame_metadata::RuntimeMetadata::V7(_) => {
65                Err(TryFromError::UnsupportedMetadataVersion(7))
66            }
67            frame_metadata::RuntimeMetadata::V8(_) => {
68                Err(TryFromError::UnsupportedMetadataVersion(8))
69            }
70            frame_metadata::RuntimeMetadata::V9(_) => {
71                Err(TryFromError::UnsupportedMetadataVersion(9))
72            }
73            frame_metadata::RuntimeMetadata::V10(_) => {
74                Err(TryFromError::UnsupportedMetadataVersion(10))
75            }
76            frame_metadata::RuntimeMetadata::V11(_) => {
77                Err(TryFromError::UnsupportedMetadataVersion(11))
78            }
79            frame_metadata::RuntimeMetadata::V12(_) => {
80                Err(TryFromError::UnsupportedMetadataVersion(12))
81            }
82            frame_metadata::RuntimeMetadata::V13(_) => {
83                Err(TryFromError::UnsupportedMetadataVersion(13))
84            }
85            frame_metadata::RuntimeMetadata::V14(m) => m.try_into(),
86            frame_metadata::RuntimeMetadata::V15(m) => m.try_into(),
87            frame_metadata::RuntimeMetadata::V16(m) => m.try_into(),
88        }
89    }
90}