diff --git a/substrate/node-template/runtime/src/template.rs b/substrate/node-template/runtime/src/template.rs index c1fa6f2d31..5a4225e63a 100644 --- a/substrate/node-template/runtime/src/template.rs +++ b/substrate/node-template/runtime/src/template.rs @@ -8,7 +8,7 @@ /// For more guidance on Substrate modules, see the example module /// https://github.com/paritytech/substrate/blob/master/srml/example/src/lib.rs -use support::{decl_module, decl_storage, decl_event, StorageValue, dispatch::Result}; +use support::{decl_module, decl_storage, decl_event, dispatch::Result}; use system::ensure_signed; /// The module's configuration trait. diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 962f3c9c73..306521b2cf 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -85,7 +85,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. spec_version: 163, - impl_version: 163, + impl_version: 164, apis: RUNTIME_API_VERSIONS, }; diff --git a/substrate/srml/staking/src/tests.rs b/substrate/srml/staking/src/tests.rs index d754cd8500..1d0beb6029 100644 --- a/substrate/srml/staking/src/tests.rs +++ b/substrate/srml/staking/src/tests.rs @@ -20,7 +20,7 @@ use super::*; use runtime_io::with_externalities; use sr_primitives::traits::OnInitialize; use sr_staking_primitives::offence::{OffenceDetails, OnOffenceHandler}; -use support::{assert_ok, assert_noop, assert_eq_uvec, StorageLinkedMap}; +use support::{assert_ok, assert_noop, assert_eq_uvec}; use mock::*; use support::traits::{Currency, ReservableCurrency}; diff --git a/substrate/srml/support/procedural/src/storage/transformation.rs b/substrate/srml/support/procedural/src/storage/transformation.rs index 73954522b1..4fc8f67c42 100644 --- a/substrate/srml/support/procedural/src/storage/transformation.rs +++ b/substrate/srml/support/procedural/src/storage/transformation.rs @@ -122,7 +122,7 @@ pub fn decl_storage_impl(input: TokenStream) -> TokenStream { &cratename, &storage_lines, &where_clause, - ); + ).unwrap_or_else(|err| err.to_compile_error()); let decl_store_items = decl_store_items( &storage_lines, @@ -637,7 +637,7 @@ fn decl_storage_items( cratename: &Ident, storage_lines: &ext::Punctuated, where_clause: &Option, -) -> TokenStream2 { +) -> syn::Result { let mut impls = TokenStream2::new(); let InstanceOpts { @@ -768,6 +768,14 @@ fn decl_storage_items( } = sline; let type_infos = get_type_infos(storage_type); + + if type_infos.is_option && default_value.inner.is_some() { + return Err(syn::Error::new_spanned( + default_value, + "Default values for Option types are not supported" + )); + } + let fielddefault = default_value.inner .as_ref() .map(|d| &d.expr) @@ -808,7 +816,8 @@ fn decl_storage_items( }; impls.extend(implementation) } - impls + + Ok(impls) } fn decl_store_items(storage_lines: &ext::Punctuated) -> TokenStream2 { diff --git a/substrate/srml/support/src/storage/storage_items.rs b/substrate/srml/support/src/storage/storage_items.rs index 3abb390ab5..b00134dbfe 100644 --- a/substrate/srml/support/src/storage/storage_items.rs +++ b/substrate/srml/support/src/storage/storage_items.rs @@ -300,10 +300,10 @@ mod tests { // non-getters: pub / $default /// Hello, this is doc! - U32 : Option = Some(3); + U32 : Option; pub PUBU32 : Option; - U32MYDEF : Option = None; - pub PUBU32MYDEF : Option = Some(3); + U32MYDEF : Option; + pub PUBU32MYDEF : Option; // getters: pub / $default // we need at least one type which uses T, otherwise GenesisConfig will complain. @@ -311,17 +311,17 @@ mod tests { pub PUBGETU32 get(pub_u32_getter) build(|config: &GenesisConfig| config.u32_getter_with_config): u32; GETU32WITHCONFIG get(u32_getter_with_config) config(): u32; pub PUBGETU32WITHCONFIG get(pub_u32_getter_with_config) config(): u32; - GETU32MYDEF get(u32_getter_mydef): Option = Some(4); + GETU32MYDEF get(u32_getter_mydef): Option; pub PUBGETU32MYDEF get(pub_u32_getter_mydef) config(): u32 = 3; GETU32WITHCONFIGMYDEF get(u32_getter_with_config_mydef) config(): u32 = 2; pub PUBGETU32WITHCONFIGMYDEF get(pub_u32_getter_with_config_mydef) config(): u32 = 1; - PUBGETU32WITHCONFIGMYDEFOPT get(pub_u32_getter_with_config_mydef_opt) config(): Option = Some(100); + PUBGETU32WITHCONFIGMYDEFOPT get(pub_u32_getter_with_config_mydef_opt) config(): Option; // map non-getters: pub / $default MAPU32 : map u32 => Option; pub PUBMAPU32 : map u32 => Option; - MAPU32MYDEF : map u32 => Option = None; - pub PUBMAPU32MYDEF : map u32 => Option = Some("hello".into()); + MAPU32MYDEF : map u32 => Option; + pub PUBMAPU32MYDEF : map u32 => Option; // map getters: pub / $default GETMAPU32 get(map_u32_getter): map u32 => String; @@ -332,7 +332,7 @@ mod tests { // linked map LINKEDMAPU32 : linked_map u32 => Option; - pub PUBLINKEDMAPU32MYDEF : linked_map u32 => Option = Some("hello".into()); + pub PUBLINKEDMAPU32MYDEF : linked_map u32 => Option; GETLINKEDMAPU32 get(linked_map_u32_getter): linked_map u32 => String; pub PUBGETLINKEDMAPU32MYDEF get(pub_linked_map_u32_getter_mydef): linked_map u32 => String = "pubmap".into(); @@ -688,7 +688,7 @@ mod tests { assert_eq!(config.pub_u32_getter_mydef, 3u32); assert_eq!(config.u32_getter_with_config_mydef, 2u32); assert_eq!(config.pub_u32_getter_with_config_mydef, 1u32); - assert_eq!(config.pub_u32_getter_with_config_mydef_opt, 100u32); + assert_eq!(config.pub_u32_getter_with_config_mydef_opt, 0u32); } } @@ -781,17 +781,14 @@ mod test_append_and_len { JustVec: Vec; JustVecWithDefault: Vec = vec![6, 9]; OptionVec: Option>; - OptionVecWithDefault: Option> = Some(vec![6, 9]); MapVec: map u32 => Vec; MapVecWithDefault: map u32 => Vec = vec![6, 9]; OptionMapVec: map u32 => Option>; - OptionMapVecWithDefault: map u32 => Option> = Some(vec![6, 9]); LinkedMapVec: linked_map u32 => Vec; LinkedMapVecWithDefault: linked_map u32 => Vec = vec![6, 9]; OptionLinkedMapVec: linked_map u32 => Option>; - OptionLinkedMapVecWithDefault: linked_map u32 => Option> = Some(vec![6, 9]); } } @@ -805,7 +802,6 @@ mod test_append_and_len { #[test] fn default_for_option() { with_externalities(&mut TestExternalities::default(), || { - assert_eq!(OptionVecWithDefault::get(), Some(vec![6, 9])); assert_eq!(OptionVec::get(), None); assert_eq!(JustVec::get(), vec![]); }); @@ -882,9 +878,6 @@ mod test_append_and_len { assert_eq!(OptionVec::get(), None); assert_eq!(OptionVec::decode_len(), Ok(0)); - assert_eq!(OptionVecWithDefault::get(), Some(vec![6, 9])); - assert_eq!(OptionVecWithDefault::decode_len(), Ok(2)); - // map assert_eq!(MapVec::get(0), vec![]); assert_eq!(MapVec::decode_len(0), Ok(0)); @@ -895,9 +888,6 @@ mod test_append_and_len { assert_eq!(OptionMapVec::get(0), None); assert_eq!(OptionMapVec::decode_len(0), Ok(0)); - assert_eq!(OptionMapVecWithDefault::get(0), Some(vec![6, 9])); - assert_eq!(OptionMapVecWithDefault::decode_len(0), Ok(2)); - // linked map assert_eq!(LinkedMapVec::get(0), vec![]); assert_eq!(LinkedMapVec::decode_len(0), Ok(0)); @@ -907,9 +897,6 @@ mod test_append_and_len { assert_eq!(OptionLinkedMapVec::get(0), None); assert_eq!(OptionLinkedMapVec::decode_len(0), Ok(0)); - - assert_eq!(OptionLinkedMapVecWithDefault::get(0), Some(vec![6, 9])); - assert_eq!(OptionLinkedMapVecWithDefault::decode_len(0), Ok(2)); }); } }