From a57f6bbe6a7d115c9c9db1c83e1cf9f5507f64b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= <bkchr@users.noreply.github.com> Date: Thu, 14 Mar 2019 21:53:05 +0100 Subject: [PATCH] Remove warning and make `__PhantomItem` unconstructable (#2000) * Remove warning and make `__PhantomItem` unconstructable * Switch to unreachable --- substrate/srml/support/src/dispatch.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index 9f30f6195b0..166b545171a 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -27,6 +27,9 @@ pub use srml_metadata::{ FunctionArgumentMetadata, OuterDispatchMetadata, OuterDispatchCall }; +/// A type that can not be instantiated. +pub enum Never {} + /// Result of a module function call; either nothing (functions are only called for "side efeects") /// or an error message. pub type Result = result::Result<(), &'static str>; @@ -615,7 +618,7 @@ macro_rules! decl_module { $(#[$attr])* pub enum $call_type<$trait_instance: $trait_name> { #[doc(hidden)] - __PhantomItem(::std::marker::PhantomData<$trait_instance>), + __PhantomItem(::std::marker::PhantomData<$trait_instance>, $crate::dispatch::Never), $( #[allow(non_camel_case_types)] $(#[doc = $doc_attr])* @@ -627,7 +630,7 @@ macro_rules! decl_module { $(#[$attr])* pub enum $call_type<$trait_instance: $trait_name> { #[doc(hidden)] - __PhantomItem(::core::marker::PhantomData<$trait_instance>), + __PhantomItem(::core::marker::PhantomData<$trait_instance>, $crate::dispatch::Never), $( #[allow(non_camel_case_types)] $(#[doc = $doc_attr])* @@ -662,7 +665,7 @@ macro_rules! decl_module { self_params == ( $( $param_name, )* ) } else { match *_other { - $call_type::__PhantomItem(_) => unreachable!(), + $call_type::__PhantomItem(_, _) => unreachable!(), _ => false, } } @@ -704,7 +707,6 @@ macro_rules! decl_module { impl<$trait_instance: $trait_name> $crate::dispatch::Encode for $call_type<$trait_instance> { fn encode_to<W: $crate::dispatch::Output>(&self, _dest: &mut W) { $crate::__impl_encode!(_dest; *self; 0; $call_type; $( fn $fn_name( $( $(#[$codec_attr on type $param])* $param_name ),* ); )*); - if let $call_type::__PhantomItem(_) = *self { unreachable!() } } } impl<$trait_instance: $trait_name> $crate::dispatch::Dispatchable @@ -723,7 +725,7 @@ macro_rules! decl_module { ) }, )* - $call_type::__PhantomItem(_) => { panic!("__PhantomItem should never be used.") }, + $call_type::__PhantomItem(_, _) => { unreachable!("__PhantomItem should never be used.") }, } } } -- GitLab