subxt_metadata/from_into/
mod.rs

1// Copyright 2019-2023 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;
9
10/// An error emitted if something goes wrong converting [`frame_metadata`]
11/// types into [`crate::Metadata`].
12#[derive(Debug, PartialEq, Eq, DeriveError)]
13#[non_exhaustive]
14pub enum TryFromError {
15    /// Type missing from type registry
16    #[error("Type id {0} is expected but not found in the type registry")]
17    TypeNotFound(u32),
18    /// Type was not a variant/enum type
19    #[error("Type {0} was not a variant/enum type, but is expected to be one")]
20    VariantExpected(u32),
21    /// An unsupported metadata version was provided.
22    #[error("Cannot convert v{0} metadata into Metadata type")]
23    UnsupportedMetadataVersion(u32),
24    /// Type name missing from type registry
25    #[error("Type name {0} is expected but not found in the type registry")]
26    TypeNameNotFound(String),
27    /// Invalid type path.
28    #[error("Type has an invalid path {0}")]
29    InvalidTypePath(String),
30}
31
32impl From<crate::Metadata> for frame_metadata::RuntimeMetadataPrefixed {
33    fn from(value: crate::Metadata) -> Self {
34        let m: frame_metadata::v15::RuntimeMetadataV15 = value.into();
35        m.into()
36    }
37}
38
39impl TryFrom<frame_metadata::RuntimeMetadataPrefixed> for crate::Metadata {
40    type Error = TryFromError;
41
42    fn try_from(value: frame_metadata::RuntimeMetadataPrefixed) -> Result<Self, Self::Error> {
43        match value.1 {
44            frame_metadata::RuntimeMetadata::V0(_) => {
45                Err(TryFromError::UnsupportedMetadataVersion(0))
46            }
47            frame_metadata::RuntimeMetadata::V1(_) => {
48                Err(TryFromError::UnsupportedMetadataVersion(1))
49            }
50            frame_metadata::RuntimeMetadata::V2(_) => {
51                Err(TryFromError::UnsupportedMetadataVersion(2))
52            }
53            frame_metadata::RuntimeMetadata::V3(_) => {
54                Err(TryFromError::UnsupportedMetadataVersion(3))
55            }
56            frame_metadata::RuntimeMetadata::V4(_) => {
57                Err(TryFromError::UnsupportedMetadataVersion(4))
58            }
59            frame_metadata::RuntimeMetadata::V5(_) => {
60                Err(TryFromError::UnsupportedMetadataVersion(5))
61            }
62            frame_metadata::RuntimeMetadata::V6(_) => {
63                Err(TryFromError::UnsupportedMetadataVersion(6))
64            }
65            frame_metadata::RuntimeMetadata::V7(_) => {
66                Err(TryFromError::UnsupportedMetadataVersion(7))
67            }
68            frame_metadata::RuntimeMetadata::V8(_) => {
69                Err(TryFromError::UnsupportedMetadataVersion(8))
70            }
71            frame_metadata::RuntimeMetadata::V9(_) => {
72                Err(TryFromError::UnsupportedMetadataVersion(9))
73            }
74            frame_metadata::RuntimeMetadata::V10(_) => {
75                Err(TryFromError::UnsupportedMetadataVersion(10))
76            }
77            frame_metadata::RuntimeMetadata::V11(_) => {
78                Err(TryFromError::UnsupportedMetadataVersion(11))
79            }
80            frame_metadata::RuntimeMetadata::V12(_) => {
81                Err(TryFromError::UnsupportedMetadataVersion(12))
82            }
83            frame_metadata::RuntimeMetadata::V13(_) => {
84                Err(TryFromError::UnsupportedMetadataVersion(13))
85            }
86            frame_metadata::RuntimeMetadata::V14(m) => m.try_into(),
87            frame_metadata::RuntimeMetadata::V15(m) => m.try_into(),
88            frame_metadata::RuntimeMetadata::V16(_opaque) => {
89                Err(TryFromError::UnsupportedMetadataVersion(16))
90            }
91        }
92    }
93}