Check that serde is present in sc-chain-spec-derive (#6636)

We should check that `serde` is present when using
`sc-chains-spec-derive`, because we require this for the generated
struct. This also switches the generated `derive` instruction to import
`Serialize`/`Deserialize` by path to not require the user to import
these derive macros.
This commit is contained in:
Bastian Köcher
2020-07-13 10:54:16 +02:00
committed by GitHub
parent 8ab23fafdc
commit 74655edebc
2 changed files with 23 additions and 8 deletions
@@ -64,7 +64,6 @@ pub fn extension_derive(ast: &DeriveInput) -> proc_macro::TokenStream {
}) })
} }
/// Implements required traits and creates `Fork` structs for `ChainSpec` custom parameter group. /// Implements required traits and creates `Fork` structs for `ChainSpec` custom parameter group.
pub fn group_derive(ast: &DeriveInput) -> proc_macro::TokenStream { pub fn group_derive(ast: &DeriveInput) -> proc_macro::TokenStream {
derive(ast, |crate_name, name, generics: &syn::Generics, field_names, field_types, _fields| { derive(ast, |crate_name, name, generics: &syn::Generics, field_names, field_types, _fields| {
@@ -75,9 +74,27 @@ pub fn group_derive(ast: &DeriveInput) -> proc_macro::TokenStream {
let to_fork = generate_base_to_fork(&fork_name, &field_names); let to_fork = generate_base_to_fork(&fork_name, &field_names);
let combine_with = generate_combine_with(&field_names); let combine_with = generate_combine_with(&field_names);
let to_base = generate_fork_to_base(name, &field_names); let to_base = generate_fork_to_base(name, &field_names);
let serde_crate_name = match proc_macro_crate::crate_name("serde") {
Ok(name) => Ident::new(&name.replace("-", "_"), Span::call_site()),
Err(e) => {
let err = Error::new(
Span::call_site(),
&format!("Could not find `serde` crate: {}", e),
).to_compile_error();
return quote!( #err ).into();
}
};
quote! { quote! {
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecExtension)] #[derive(
Debug,
Clone,
PartialEq,
#serde_crate_name::Serialize,
#serde_crate_name::Deserialize,
ChainSpecExtension,
)]
pub struct #fork_name #ty_generics #where_clause { pub struct #fork_name #ty_generics #where_clause {
#fork_fields #fork_fields
} }
+4 -6
View File
@@ -29,10 +29,9 @@
//! //!
//! ```rust //! ```rust
//! use std::collections::HashMap; //! use std::collections::HashMap;
//! use serde::{Serialize, Deserialize};
//! use sc_chain_spec::{GenericChainSpec, ChainSpecExtension}; //! use sc_chain_spec::{GenericChainSpec, ChainSpecExtension};
//! //!
//! #[derive(Clone, Debug, Serialize, Deserialize, ChainSpecExtension)] //! #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecExtension)]
//! pub struct MyExtension { //! pub struct MyExtension {
//! pub known_blocks: HashMap<u64, String>, //! pub known_blocks: HashMap<u64, String>,
//! } //! }
@@ -48,21 +47,20 @@
//! block number. //! block number.
//! //!
//! ```rust //! ```rust
//! use serde::{Serialize, Deserialize};
//! use sc_chain_spec::{Forks, ChainSpecGroup, ChainSpecExtension, GenericChainSpec}; //! use sc_chain_spec::{Forks, ChainSpecGroup, ChainSpecExtension, GenericChainSpec};
//! //!
//! #[derive(Clone, Debug, Serialize, Deserialize, ChainSpecGroup)] //! #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup)]
//! pub struct ClientParams { //! pub struct ClientParams {
//! max_block_size: usize, //! max_block_size: usize,
//! max_extrinsic_size: usize, //! max_extrinsic_size: usize,
//! } //! }
//! //!
//! #[derive(Clone, Debug, Serialize, Deserialize, ChainSpecGroup)] //! #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup)]
//! pub struct PoolParams { //! pub struct PoolParams {
//! max_transaction_size: usize, //! max_transaction_size: usize,
//! } //! }
//! //!
//! #[derive(Clone, Debug, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] //! #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, ChainSpecGroup, ChainSpecExtension)]
//! pub struct Extension { //! pub struct Extension {
//! pub client: ClientParams, //! pub client: ClientParams,
//! pub pool: PoolParams, //! pub pool: PoolParams,