mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-22 09:08:06 +00:00
78a106f059
* Update frame-metadata to the latest branch Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Add outer enum types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Extend the extrinsic with address,call,sign,extra types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Codegen test Event, Error and Call for outer enums Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Revert "Codegen test Event, Error and Call for outer enums" This reverts commit db542dca0369eedd257a7ec031d5b5549bc46a88. * Update frame-metadata from the latest release Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update scale-info Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * codegen/error: Support v15 message Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Convert v14 to v15 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/retain: Adjust to extrinsic type for V15 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/validation: Adjust hashing for extrinsic types V15 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * scripts: Fetch V15 and output codegen for full_client only Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt/blocks: Use extrinsic types directly Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * testing: Fetch V15 for build script Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * artifacts: Generate from latest polkadot version Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * codegen: Fetch legacy with old API for v14 only Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * rpc: Fetch metadata versions Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * client: Fetch latest unstable then V15 then V14 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * testing: Adjust testing API to latest interface Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjust clippy Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Generate the `RuntimeError` type for V14 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Remove testing files Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * testing/staking: Remove controller account from bond Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/validation: Use specific variants for hashing RuntimeCall Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * XXX: Custom Substrate binary: must revert with next release Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * XXX: To revert: CI use hardcoded substrate Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * codegen: Use v15 outer enum types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Retain outer enum types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * codegen: Use outer enum types instead of generating them Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update artifacts Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Revert "XXX: Custom Substrate binary: must revert with next release" This reverts commit e9705298661919f5769720b35030759fb8a7b01d. Revert "XXX: To revert: CI use hardcoded substrate" This reverts commit b18a5a0985a56ee4ad99bc9a1c0f9cd733cf4271. * testing: Include env for dummy wat contracts Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Adjsut clippy Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * ci: Use new link for fetching latest substrate binary Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * tests: Include dummy RuntimeEvent into test metadata Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * ci: Bump light-client timeout tests to 25min Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/validation: Use specific pallets as provided Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * testing: Rename metadata constant Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Use call_ty instead of signature_ty Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Rename retaining variant function Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Use Option<&[&str]> Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * online_client: Fetch V15 metadata explicitely Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/validation: Include the hash of the outer enum types Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Fix sign typo Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * artifacts: Update the artifacts Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Remove RootError RootEvent and RootExtrinsic traits Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update polkadot.rs Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/tests: Ensure outer enum variants are retained Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * scripts: Include multiple pallets for our decoding purposes Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Apply clippy Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * artifacts: Update small metadata Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * error: Keep raw bytes for the ModuleError representation Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * error: Modify docs to not include links Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt/tests: Propagate `RuntimeCall` to outer enums Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * subxt: Provide proper byte slice for decoding Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update artifacts Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli/tests: Adjust expected pallets message Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Test conversion from v14 to v15 Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata: Fix typo Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Update subxt/src/blocks/extrinsic_types.rs Co-authored-by: James Wilson <james@jsdw.me> * metadata: Simplify type path for RuntimeError Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * metadata/validation: Use visited ids per outer enum Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * error: Remove RawModuleError Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Fix new clippy error from updated rust version Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: James Wilson <james@jsdw.me>
136 lines
6.3 KiB
Rust
136 lines
6.3 KiB
Rust
// Copyright 2019-2023 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
//! Errors that can be emitted from codegen.
|
|
|
|
use proc_macro2::{Span, TokenStream as TokenStream2};
|
|
|
|
/// Error returned when the Codegen cannot generate the runtime API.
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum CodegenError {
|
|
/// The given metadata type could not be found.
|
|
#[error("Could not find type with ID {0} in the type registry; please raise a support issue.")]
|
|
TypeNotFound(u32),
|
|
/// Cannot fetch the metadata bytes.
|
|
#[error("Failed to fetch metadata, make sure that you're pointing at a node which is providing substrate-based metadata: {0}")]
|
|
Fetch(#[from] FetchMetadataError),
|
|
/// Failed IO for the metadata file.
|
|
#[error("Failed IO for {0}, make sure that you are providing the correct file path for metadata: {1}")]
|
|
Io(String, std::io::Error),
|
|
/// Cannot decode the metadata bytes.
|
|
#[error("Could not decode metadata, only V14 and V15 metadata are supported: {0}")]
|
|
Decode(#[from] codec::Error),
|
|
/// Out of line modules are not supported.
|
|
#[error("Out-of-line subxt modules are not supported, make sure you are providing a body to your module: pub mod polkadot {{ ... }}")]
|
|
InvalidModule(Span),
|
|
/// Expected named or unnamed fields.
|
|
#[error("Fields should either be all named or all unnamed, make sure you are providing a valid metadata: {0}")]
|
|
InvalidFields(String),
|
|
/// Substitute types must have a valid path.
|
|
#[error("Type substitution error: {0}")]
|
|
TypeSubstitutionError(#[from] TypeSubstitutionError),
|
|
/// Invalid type path.
|
|
#[error("Invalid type path {0}: {1}")]
|
|
InvalidTypePath(String, syn::Error),
|
|
/// Metadata for constant could not be found.
|
|
#[error("Metadata for constant entry {0}_{1} could not be found. Make sure you are providing a valid substrate-based metadata")]
|
|
MissingConstantMetadata(String, String),
|
|
/// Metadata for storage could not be found.
|
|
#[error("Metadata for storage entry {0}_{1} could not be found. Make sure you are providing a valid substrate-based metadata")]
|
|
MissingStorageMetadata(String, String),
|
|
/// Metadata for call could not be found.
|
|
#[error("Metadata for call entry {0}_{1} could not be found. Make sure you are providing a valid substrate-based metadata")]
|
|
MissingCallMetadata(String, String),
|
|
/// Metadata for call could not be found.
|
|
#[error("Metadata for runtime API entry {0}_{1} could not be found. Make sure you are providing a valid substrate-based metadata")]
|
|
MissingRuntimeApiMetadata(String, String),
|
|
/// Call variant must have all named fields.
|
|
#[error("Call variant for type {0} must have all named fields. Make sure you are providing a valid substrate-based metadata")]
|
|
InvalidCallVariant(u32),
|
|
/// Type should be an variant/enum.
|
|
#[error(
|
|
"{0} type should be an variant/enum type. Make sure you are providing a valid substrate-based metadata"
|
|
)]
|
|
InvalidType(String),
|
|
/// Extrinsic call type could not be found.
|
|
#[error(
|
|
"Extrinsic call type could not be found. Make sure you are providing a valid substrate-based metadata"
|
|
)]
|
|
MissingCallType,
|
|
}
|
|
|
|
impl CodegenError {
|
|
/// Fetch the location for this error.
|
|
// Todo: Probably worth storing location outside of the variant,
|
|
// so that there's a common way to set a location for some error.
|
|
fn get_location(&self) -> Span {
|
|
match self {
|
|
Self::InvalidModule(span) => *span,
|
|
Self::TypeSubstitutionError(err) => err.get_location(),
|
|
Self::InvalidTypePath(_, err) => err.span(),
|
|
_ => proc_macro2::Span::call_site(),
|
|
}
|
|
}
|
|
/// Render the error as an invocation of syn::compile_error!.
|
|
pub fn into_compile_error(self) -> TokenStream2 {
|
|
let msg = self.to_string();
|
|
let span = self.get_location();
|
|
syn::Error::new(span, msg).into_compile_error()
|
|
}
|
|
}
|
|
|
|
/// Error attempting to load metadata.
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum FetchMetadataError {
|
|
#[error("Cannot decode hex value: {0}")]
|
|
DecodeError(#[from] hex::FromHexError),
|
|
#[error("Cannot scale encode/decode value: {0}")]
|
|
CodecError(#[from] codec::Error),
|
|
#[error("Request error: {0}")]
|
|
RequestError(#[from] jsonrpsee::core::Error),
|
|
#[error("'{0}' not supported, supported URI schemes are http, https, ws or wss.")]
|
|
InvalidScheme(String),
|
|
#[error("Other error: {0}")]
|
|
Other(String),
|
|
}
|
|
|
|
/// Error attempting to do type substitution.
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum TypeSubstitutionError {
|
|
/// Substitute "to" type must be an absolute path.
|
|
#[error("`substitute_type(with = <path>)` must be a path prefixed with 'crate::' or '::'")]
|
|
ExpectedAbsolutePath(Span),
|
|
/// Substitute types must have a valid path.
|
|
#[error("Substitute types must have a valid path.")]
|
|
EmptySubstitutePath(Span),
|
|
/// From/To substitution types should use angle bracket generics.
|
|
#[error("Expected the from/to type generics to have the form 'Foo<A,B,C..>'.")]
|
|
ExpectedAngleBracketGenerics(Span),
|
|
/// Source substitute type must be an ident.
|
|
#[error("Expected an ident like 'Foo' or 'A' to mark a type to be substituted.")]
|
|
InvalidFromType(Span),
|
|
/// Target type is invalid.
|
|
#[error("Expected an ident like 'Foo' or an absolute concrete path like '::path::to::Bar' for the substitute type.")]
|
|
InvalidToType(Span),
|
|
/// Target ident doesn't correspond to any source type.
|
|
#[error("Cannot find matching param on 'from' type.")]
|
|
NoMatchingFromType(Span),
|
|
}
|
|
|
|
impl TypeSubstitutionError {
|
|
/// Fetch the location for this error.
|
|
// Todo: Probably worth storing location outside of the variant,
|
|
// so that there's a common way to set a location for some error.
|
|
fn get_location(&self) -> Span {
|
|
match self {
|
|
TypeSubstitutionError::ExpectedAbsolutePath(span) => *span,
|
|
TypeSubstitutionError::EmptySubstitutePath(span) => *span,
|
|
TypeSubstitutionError::ExpectedAngleBracketGenerics(span) => *span,
|
|
TypeSubstitutionError::InvalidFromType(span) => *span,
|
|
TypeSubstitutionError::InvalidToType(span) => *span,
|
|
TypeSubstitutionError::NoMatchingFromType(span) => *span,
|
|
}
|
|
}
|
|
}
|