summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index b823fb34..8858377f 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -3010,16 +3010,26 @@ impl CodeGenerator for Enum {
if !variation.is_const() {
let mut derives = derives_of_item(item, ctx);
- // For backwards compat, enums always derive Clone/Eq/PartialEq/Hash, even
+ // For backwards compat, enums always derive Debug/Clone/Eq/PartialEq/Hash, even
// if we don't generate those by default.
+ if !item.annotations().disallow_debug() {
+ derives.insert(DerivableTraits::DEBUG);
+ }
+ if !item.annotations().disallow_copy() {
+ derives.insert(DerivableTraits::COPY);
+ }
derives.insert(
DerivableTraits::CLONE |
- DerivableTraits::COPY |
DerivableTraits::HASH |
DerivableTraits::PARTIAL_EQ |
DerivableTraits::EQ,
);
- let derives: Vec<_> = derives.into();
+ let mut derives: Vec<_> = derives.into();
+ for derive in item.annotations().derives().iter() {
+ if !derives.contains(&derive.as_str()) {
+ derives.push(&derive);
+ }
+ }
attrs.push(attributes::derives(&derives));
}