netlink_rust/core/
helpers.rs1#[macro_export]
4macro_rules! extended_enum_default {
5 ( $(#[$outer:meta])* $name:ident, $ty:ty, $(#[$inner_def:meta])* $var_def:ident => $val_def:expr,
6 $( $(#[$inner:meta])* $var:ident => $val:expr ),+ $(,)* ) => (
7
8 $(#[$outer])*
9 #[derive(Clone,Debug,Eq,PartialEq)]
10 pub enum $name {
11 $(#[$inner_def])*
12 $var_def,
13 $(
14 $(#[$inner])*
15 $var,
16 )*
17 }
18
19 impl From<$ty> for $name {
20 fn from(v: $ty) -> Self {
21 match v {
22 $val_def => $name::$var_def,
23 $( $val => $name::$var,)*
24 _ => $name::$var_def,
25 }
26 }
27 }
28
29 impl From<$name> for $ty {
30 fn from(v: $name) -> Self {
31 match v {
32 $name::$var_def => $val_def,
33 $( $name::$var => $val, )*
34 }
35 }
36 }
37
38 impl ConvertFrom<$ty> for $name {
39 fn convert_from(v: $ty) -> Option<Self> {
40 match v {
41 $val_def => Some($name::$var_def),
42 $( $val => Some($name::$var),)*
43 _ => None,
44 }
45 }
46 }
47
48 impl PartialEq<$name> for $ty {
49 fn eq(&self, other: &$name) -> bool {
50 match *other {
51 $name::$var_def => *self == $val_def,
52 $( $name::$var => *self == $val, )*
53 }
54 }
55
56 fn ne(&self, other: &$name) -> bool {
57 match *other {
58 $name::$var_def => *self != $val_def,
59 $( $name::$var => *self != $val, )*
60 }
61 }
62 }
63 );
64}
65
66#[macro_export]
69macro_rules! extended_enum {
70 ( $(#[$outer:meta])* $name:ident, $ty:ty, $( $(#[$inner:meta])* $var:ident => $val:expr ),+ $(,)* ) => (
71
72 $(#[$outer])*
73 #[derive(Clone,Debug,Eq,PartialEq)]
74 pub enum $name {
75 $(
76 $(#[$inner])*
77 $var,
78 )*
79 }
80
81 impl From<$ty> for $name {
82 fn from(v: $ty) -> Self {
83 match v {
84 $( $val => $name::$var,)*
85 _ => panic!("Bad Value"),
86 }
87 }
88 }
89
90 impl From<$name> for $ty {
91 fn from(v: $name) -> Self {
92 match v {
93 $( $name::$var => $val, )*
94 }
95 }
96 }
97
98 impl ConvertFrom<$ty> for $name {
99 fn convert_from(v: $ty) -> Option<Self> {
100 match v {
101 $( $val => Some($name::$var),)*
102 _ => None,
103 }
104 }
105 }
106
107 impl PartialEq<$name> for $ty {
108 fn eq(&self, other: &$name) -> bool {
109 match *other {
110 $( $name::$var => *self == $val, )*
111 }
112 }
113
114 fn ne(&self, other: &$name) -> bool {
115 match *other {
116 $( $name::$var => *self != $val, )*
117 }
118 }
119 }
120 );
121}