mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-07 23:38:00 +00:00
c6f3798078
* srml-system checks * wip * more modules compiles * node-runtime checks * build.sh passes * include dispatch error in failed event * revert some unnecessary changes * refactor based on comments * more compile error fixes * avoid unnecessary into * reorder code * fixes some tests * manually implement encode & decode to avoid i8 workaround * more test fixes * more fixes * more error fixes * Apply suggestions from code review Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com> * address comments * test for DispatchError encoding * tyep alias for democracy * make error printable * line width * fix balances tests * fix executive test * fix system tests * bump version * ensure consistent method signature * Apply suggestions from code review Co-Authored-By: Gavin Wood <github@gavwood.com> * changes based on review * Add issue number for TODOs * fix * line width * fix test * Update core/sr-primitives/src/lib.rs Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> * Update core/sr-primitives/src/traits.rs Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> * Update srml/council/src/motions.rs Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> * Update srml/council/src/motions.rs Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> * update based on review * More concrete macro matching * fix test build issue * Update hex-literal dependency version. (#3141) * Update hex-literal dep version. * Update lock file. * Start to rework the new error handling * More work to get it back compiling * Start to fix after master merge * The great transaction error handling refactoring * Make `decl_error` errors convertible to `&'static str` * Make srml-executive build again * Fix `sr-primitives` tests * More fixes * Last round of fix ups * Fix build * Fix build * Apply suggestions from code review Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com> * Rename some stuff * Fixes after master merge * Adds `CheckBlockGasLimit` signed extension * Remove debug stuff * Fix srml-balances test * Rename `InvalidIndex` to `CannotLookup` * Remove weird generic parameters * Rename function again * Fix import * Document the signed extension * Change from `Into` to `From` * Update srml/contracts/src/lib.rs Co-Authored-By: Sergei Pepyakin <sergei@parity.io> * Fix compilation * Update srml/contracts/src/lib.rs Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com> * Update core/sr-primitives/src/transaction_validity.rs Co-Authored-By: Tomasz Drwięga <tomusdrw@users.noreply.github.com> * Remove unused code * Fix compilation * Some cleanups * Fix compile errors * Make `TransactionValidity` a `Result` * Apply suggestions from code review Co-Authored-By: Gavin Wood <gavin@parity.io> * Beautify the code a little bit and fix test * Make `CannotLookup` an inherent error declared by `decl_error!` * Adds some documentation * Make `ApplyOutcome` a result * Up the spec_version * Apply suggestions from code review Co-Authored-By: Gavin Wood <gavin@parity.io> Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com>
152 lines
3.6 KiB
Rust
152 lines
3.6 KiB
Rust
// Copyright 2019 Parity Technologies (UK) Ltd.
|
|
// This file is part of Substrate.
|
|
|
|
// Substrate is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Substrate is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Substrate. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Macro for declaring a module error.
|
|
|
|
#[doc(hidden)]
|
|
pub use sr_primitives::traits::LookupError;
|
|
|
|
/// Declare an error type for a runtime module.
|
|
///
|
|
/// The generated error type inherently has the variants `Other` and `CannotLookup`. `Other` can
|
|
/// hold any `&'static str` error message and is present for convenience/backward compatibility.
|
|
/// The `CannotLookup` variant indicates that some lookup could not be done. For both variants the
|
|
/// error type implements `From<&'static str>` and `From<LookupError>` to make them usable with the
|
|
/// try operator.
|
|
///
|
|
/// # Usage
|
|
///
|
|
/// ```
|
|
/// # use srml_support::decl_error;
|
|
/// decl_error! {
|
|
/// /// Errors that can occur in my module.
|
|
/// pub enum MyError {
|
|
/// /// Hey this is an error message that indicates bla.
|
|
/// MyCoolErrorMessage,
|
|
/// /// You are just not cool enough for my module!
|
|
/// YouAreNotCoolEnough,
|
|
/// }
|
|
/// }
|
|
/// ```
|
|
///
|
|
/// `decl_error!` supports only variants that do not hold any data.
|
|
#[macro_export]
|
|
macro_rules! decl_error {
|
|
(
|
|
$(#[$attr:meta])*
|
|
pub enum $error:ident {
|
|
$(
|
|
$( #[$variant_attr:meta] )*
|
|
$name:ident
|
|
),*
|
|
$(,)?
|
|
}
|
|
) => {
|
|
#[derive(Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "std", derive(Debug))]
|
|
$(#[$attr])*
|
|
pub enum $error {
|
|
Other(&'static str),
|
|
CannotLookup,
|
|
$(
|
|
$(#[$variant_attr])*
|
|
$name
|
|
),*
|
|
}
|
|
|
|
impl $crate::dispatch::ModuleDispatchError for $error {
|
|
fn as_u8(&self) -> u8 {
|
|
$crate::decl_error! {
|
|
@GENERATE_AS_U8
|
|
self
|
|
$error
|
|
{}
|
|
2,
|
|
$( $name ),*
|
|
}
|
|
}
|
|
|
|
fn as_str(&self) -> &'static str {
|
|
match self {
|
|
$error::Other(err) => err,
|
|
$error::CannotLookup => "Can not lookup",
|
|
$(
|
|
$error::$name => stringify!($name),
|
|
)*
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<&'static str> for $error {
|
|
fn from(val: &'static str) -> $error {
|
|
$error::Other(val)
|
|
}
|
|
}
|
|
|
|
impl From<$crate::error::LookupError> for $error {
|
|
fn from(_: $crate::error::LookupError) -> $error {
|
|
$error::CannotLookup
|
|
}
|
|
}
|
|
|
|
impl From<$error> for &'static str {
|
|
fn from(err: $error) -> &'static str {
|
|
use $crate::dispatch::ModuleDispatchError;
|
|
err.as_str()
|
|
}
|
|
}
|
|
|
|
impl Into<$crate::dispatch::DispatchError> for $error {
|
|
fn into(self) -> $crate::dispatch::DispatchError {
|
|
use $crate::dispatch::ModuleDispatchError;
|
|
$crate::dispatch::DispatchError::new(None, self.as_u8(), Some(self.as_str()))
|
|
}
|
|
}
|
|
};
|
|
(@GENERATE_AS_U8
|
|
$self:ident
|
|
$error:ident
|
|
{ $( $generated:tt )* }
|
|
$index:expr,
|
|
$name:ident
|
|
$( , $rest:ident )*
|
|
) => {
|
|
$crate::decl_error! {
|
|
@GENERATE_AS_U8
|
|
$self
|
|
$error
|
|
{
|
|
$( $generated )*
|
|
$error::$name => $index,
|
|
}
|
|
$index + 1,
|
|
$( $rest ),*
|
|
}
|
|
};
|
|
(@GENERATE_AS_U8
|
|
$self:ident
|
|
$error:ident
|
|
{ $( $generated:tt )* }
|
|
$index:expr,
|
|
) => {
|
|
match $self {
|
|
$error::Other(_) => 0,
|
|
$error::CannotLookup => 1,
|
|
$( $generated )*
|
|
}
|
|
}
|
|
}
|