google/zerocopy

`#[derive(IntoBytes)]` on generic enums emits code with an arity error.

jswrenn opened this issue · 0 comments

This:

#[derive(IntoBytes)]
#[repr(u8)]
enum MyEnum<T> {
    Foo(T),
}

...expands to this:

unsafe impl<T> ::zerocopy::IntoBytes for MyEnum<T>
where
    T: ::zerocopy::IntoBytes,
    ::zerocopy::util::macro_util::HasPadding<
        MyEnum,
        {
            #[repr(u8)]
            #[allow(dead_code)]
            enum ___ZerocopyTag {
                Foo,
            }
            false
                || ::zerocopy::util::macro_util::core_reexport::mem::size_of::<MyEnum>()
                    != (::zerocopy::util::macro_util::core_reexport::mem::size_of::<
                        ___ZerocopyTag,
                    >()
                        + ::zerocopy::util::macro_util::core_reexport::mem::size_of::<
                            T,
                        >())
        },
    >: ::zerocopy::util::macro_util::ShouldBe<false>,
{
    fn only_derive_is_allowed_to_implement_this_trait() {}
}

...in which MyEnum is unparameterized in the where bound. Consequently, a generic arity error is emitted.