diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2016-08-24 21:10:19 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2016-09-03 13:39:35 +0300 |
| commit | 59ccb7b6dbaf3a590cf3a234661aa7dcc2188aed (patch) | |
| tree | 5df2908d7ef4fe47de984b612ab9cd62d50ac02e /src/libsyntax_ext | |
| parent | 079c390d5089735b5eaa8b06ddb3beedcddbee7d (diff) | |
| download | rust-59ccb7b6dbaf3a590cf3a234661aa7dcc2188aed.tar.gz rust-59ccb7b6dbaf3a590cf3a234661aa7dcc2188aed.zip | |
Support deriving some traits for unions
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/deriving/generic/mod.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libsyntax_ext/deriving/generic/mod.rs b/src/libsyntax_ext/deriving/generic/mod.rs index 5c636d43a71..b37d5332983 100644 --- a/src/libsyntax_ext/deriving/generic/mod.rs +++ b/src/libsyntax_ext/deriving/generic/mod.rs @@ -410,9 +410,18 @@ impl<'a> TraitDef<'a> { ast::ItemKind::Enum(ref enum_def, ref generics) => { self.expand_enum_def(cx, enum_def, &item.attrs, item.ident, generics) } + ast::ItemKind::Union(ref struct_def, ref generics) => { + if self.supports_unions { + self.expand_struct_def(cx, &struct_def, item.ident, generics) + } else { + cx.span_err(mitem.span, + "this trait cannot be derived for unions"); + return; + } + } _ => { cx.span_err(mitem.span, - "`derive` may only be applied to structs and enums"); + "`derive` may only be applied to structs, enums and unions"); return; } }; |
