sp_debug_derive/lib.rs
1// This file is part of Substrate.
2
3// Copyright (C) Parity Technologies (UK) Ltd.
4// SPDX-License-Identifier: Apache-2.0
5
6// Licensed under the Apache License, Version 2.0 (the "License");
7// you may not use this file except in compliance with the License.
8// You may obtain a copy of the License at
9//
10// http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS,
14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15// See the License for the specific language governing permissions and
16// limitations under the License.
17
18//! Macros to derive runtime debug implementation.
19//!
20//! This macro is deprecated. Use `#[derive(Debug)]` directly instead.
21//!
22//! ```rust
23//! #[derive(sp_debug_derive::RuntimeDebug)]
24//! struct MyStruct;
25//!
26//! assert_eq!(format!("{:?}", MyStruct), "MyStruct");
27//! ```
28
29mod impls;
30
31use proc_macro::TokenStream;
32use quote::quote;
33
34/// Derive macro for `Debug` that emits a deprecation warning.
35///
36/// This macro is deprecated. Use `#[derive(Debug)]` directly instead.
37#[proc_macro_derive(RuntimeDebug)]
38pub fn runtime_debug_derive(input: TokenStream) -> TokenStream {
39 let input: syn::DeriveInput = syn::parse_macro_input!(input);
40 let name = &input.ident;
41
42 let warning = proc_macro_warning::Warning::new_deprecated(&format!("RuntimeDebug_{}", name))
43 .old("derive `RuntimeDebug`")
44 .new("derive `Debug`")
45 .span(input.ident.span())
46 .build_or_panic();
47
48 let debug_impl: proc_macro2::TokenStream = impls::debug_derive(input).into();
49
50 quote!(#warning #debug_impl).into()
51}