diff --git a/src/libproc_macro/bridge/rpc.rs b/src/libproc_macro/bridge/rpc.rs index 6685aa1acac..74ae711a473 100644 --- a/src/libproc_macro/bridge/rpc.rs +++ b/src/libproc_macro/bridge/rpc.rs @@ -71,15 +71,18 @@ macro_rules! rpc_encode_decode { (enum $name:ident $(<$($T:ident),+>)* { $($variant:ident $(($field:ident))*),* $(,)* }) => { impl),+)*> Encode for $name $(<$($T),+>)* { fn encode(self, w: &mut Writer, s: &mut S) { - // HACK(eddyb) `Tag` enum duplicated between the + // HACK(eddyb): `Tag` enum duplicated between the // two impls as there's no other place to stash it. - #[repr(u8)] enum Tag { $($variant),* } #[allow(non_upper_case_globals)] - impl Tag { $(const $variant: u8 = Tag::$variant as u8;)* } + mod tag { + #[repr(u8)] enum Tag { $($variant),* } + + $(pub const $variant: u8 = Tag::$variant as u8;)* + } match self { $($name::$variant $(($field))* => { - ::$variant.encode(w, s); + tag::$variant.encode(w, s); $($field.encode(w, s);)* })* } @@ -90,14 +93,17 @@ macro_rules! rpc_encode_decode { for $name $(<$($T),+>)* { fn decode(r: &mut Reader<'a>, s: &mut S) -> Self { - // HACK(eddyb) `Tag` enum duplicated between the + // HACK(eddyb): `Tag` enum duplicated between the // two impls as there's no other place to stash it. - #[repr(u8)] enum Tag { $($variant),* } #[allow(non_upper_case_globals)] - impl Tag { $(const $variant: u8 = Tag::$variant as u8;)* } + mod tag { + #[repr(u8)] enum Tag { $($variant),* } + + $(pub const $variant: u8 = Tag::$variant as u8;)* + } match u8::decode(r, s) { - $(::$variant => { + $(tag::$variant => { $(let $field = DecodeMut::decode(r, s);)* $name::$variant $(($field))* })*