46 lines
915 B
Rust
46 lines
915 B
Rust
// Copyright 2022 The Fuchsia Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#![allow(warnings)]
|
|
|
|
mod util;
|
|
|
|
use {core::marker::PhantomData, static_assertions::assert_impl_all, zerocopy::KnownLayout};
|
|
|
|
#[derive(KnownLayout)]
|
|
enum Foo {
|
|
A,
|
|
}
|
|
|
|
assert_impl_all!(Foo: KnownLayout);
|
|
|
|
#[derive(KnownLayout)]
|
|
enum Bar {
|
|
A = 0,
|
|
}
|
|
|
|
assert_impl_all!(Bar: KnownLayout);
|
|
|
|
#[derive(KnownLayout)]
|
|
enum Baz {
|
|
A = 1,
|
|
B = 0,
|
|
}
|
|
|
|
assert_impl_all!(Baz: KnownLayout);
|
|
|
|
// Deriving `KnownLayout` should work if the enum has bounded parameters.
|
|
|
|
#[derive(KnownLayout)]
|
|
#[repr(C)]
|
|
enum WithParams<'a: 'b, 'b: 'a, const N: usize, T: 'a + 'b + KnownLayout>
|
|
where
|
|
'a: 'b,
|
|
'b: 'a,
|
|
T: 'a + 'b + KnownLayout,
|
|
{
|
|
Variant([T; N], PhantomData<&'a &'b ()>),
|
|
}
|
|
|
|
assert_impl_all!(WithParams<'static, 'static, 42, u8>: KnownLayout);
|