// Copyright 2019 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)] use zerocopy::AsBytes; struct IsAsBytes(T); // Fail compilation if `$ty: !AsBytes`. macro_rules! is_as_bytes { ($ty:ty) => { const _: () = { let _: IsAsBytes<$ty>; }; }; } // An enum is `AsBytes` if if has a defined repr. #[derive(AsBytes)] #[repr(C)] enum C { A, } is_as_bytes!(C); #[derive(AsBytes)] #[repr(u8)] enum U8 { A, } is_as_bytes!(U8); #[derive(AsBytes)] #[repr(u16)] enum U16 { A, } is_as_bytes!(U16); #[derive(AsBytes)] #[repr(u32)] enum U32 { A, } is_as_bytes!(U32); #[derive(AsBytes)] #[repr(u64)] enum U64 { A, } is_as_bytes!(U64); #[derive(AsBytes)] #[repr(usize)] enum Usize { A, } is_as_bytes!(Usize); #[derive(AsBytes)] #[repr(i8)] enum I8 { A, } is_as_bytes!(I8); #[derive(AsBytes)] #[repr(i16)] enum I16 { A, } is_as_bytes!(I16); #[derive(AsBytes)] #[repr(i32)] enum I32 { A, } is_as_bytes!(I32); #[derive(AsBytes)] #[repr(i64)] enum I64 { A, } is_as_bytes!(I64); #[derive(AsBytes)] #[repr(isize)] enum Isize { A, } is_as_bytes!(Isize);