// Copyright 2019 Robin Krahl // SPDX-License-Identifier: GPL-3.0-or-later use core::marker::Sized; macro_rules! enum_u8 { ( $(#[$outer:meta])* pub enum $name:ident { $($var:ident = $num:expr),+ $(,)* } ) => { $(#[$outer])* #[repr(u8)] pub enum $name { $( $var = $num, )* } impl crate::util::TryFrom for $name { fn try_from(val: u8) -> ::core::result::Result { match val { $( $num => Ok($name::$var), )* _ => Err(()) } } } impl From<$name> for u8 { fn from(val: $name) -> u8 { val as u8 } } }; } pub trait TryFrom: Sized { fn try_from(val: T) -> Result; }