109 lines
1.2 KiB
Rust
109 lines
1.2 KiB
Rust
// 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: AsBytes>(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);
|