From c43b3bc9f894e3bd52bab37f69b50151d46d49ba Mon Sep 17 00:00:00 2001 From: Andy Caldwell Date: Fri, 15 Nov 2024 01:51:41 +0000 Subject: [PATCH] Use `#[derive]` for `Copy`/`Clone` in `s!` and friends. Allows use of `#[cfg]` to skip items in an `s!` block without creating invalid, orphaned `impl` blocks. (backport ) (cherry picked from commit 44c548d00a68feebf80ebc919f3964d9330cc668) --- src/macros.rs | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 7fd61e4b34eba..ff8afee32281a 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -82,16 +82,11 @@ macro_rules! s { __item! { #[repr(C)] #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] + #[derive(Copy, Clone)] #[allow(deprecated)] $(#[$attr])* pub struct $i { $($field)* } } - #[allow(deprecated)] - impl ::Copy for $i {} - #[allow(deprecated)] - impl ::Clone for $i { - fn clone(&self) -> $i { *self } - } ); } @@ -106,13 +101,10 @@ macro_rules! s_paren { )* ) => ($( __item! { #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] + #[derive(Copy, Clone)] $(#[$attr])* pub struct $i ( $($field)* ); } - impl ::Copy for $i {} - impl ::Clone for $i { - fn clone(&self) -> $i { *self } - } )*); } @@ -130,28 +122,19 @@ macro_rules! s_no_extra_traits { (it: $(#[$attr:meta])* pub union $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] + #[derive(Copy, Clone)] $(#[$attr])* pub union $i { $($field)* } } - - impl ::Copy for $i {} - impl ::Clone for $i { - fn clone(&self) -> $i { *self } - } ); (it: $(#[$attr:meta])* pub struct $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] + #[derive(Copy, Clone)] $(#[$attr])* pub struct $i { $($field)* } } - #[allow(deprecated)] - impl ::Copy for $i {} - #[allow(deprecated)] - impl ::Clone for $i { - fn clone(&self) -> $i { *self } - } ); } @@ -177,13 +160,10 @@ macro_rules! e { )*) => ($( __item! { #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] + #[derive(Copy, Clone)] $(#[$attr])* pub enum $i { $($field)* } } - impl ::Copy for $i {} - impl ::Clone for $i { - fn clone(&self) -> $i { *self } - } )*); }