cubeb_sys/
macros.rs

1// Copyright © 2017-2018 Mozilla Foundation
2//
3// This program is made available under an ISC-style license.  See the
4// accompanying file LICENSE for details.
5
6macro_rules! cubeb_enum {
7    (pub enum $name:ident { $($variants:tt)* }) => {
8        #[cfg(target_env = "msvc")]
9        pub type $name = i32;
10        #[cfg(not(target_env = "msvc"))]
11        pub type $name = u32;
12        cubeb_enum!(gen, $name, 0, $($variants)*);
13    };
14    (pub enum $name:ident: $t:ty { $($variants:tt)* }) => {
15        pub type $name = $t;
16        cubeb_enum!(gen, $name, 0, $($variants)*);
17    };
18    (gen, $name:ident, $val:expr, $variant:ident, $($rest:tt)*) => {
19        pub const $variant: $name = $val;
20        cubeb_enum!(gen, $name, $val+1, $($rest)*);
21    };
22    (gen, $name:ident, $val:expr, $variant:ident = $e:expr, $($rest:tt)*) => {
23        pub const $variant: $name = $e;
24        cubeb_enum!(gen, $name, $e+1, $($rest)*);
25    };
26    (gen, $name:ident, $val:expr, ) => {}
27}