/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ macro_rules! get_inner_and_call( ($enum_value: expr, $enum_type: ident, $function_name: ident) => { match $enum_value { #[cfg(all(target_os = "linux", feature = "native-bluetooth"))] &$enum_type::Bluez(ref bluez) => bluez.$function_name(), #[cfg(all(target_os = "android", feature = "native-bluetooth"))] &$enum_type::Android(ref android) => android.$function_name(), #[cfg(all(target_os = "macos", feature = "native-bluetooth"))] &$enum_type::Mac(ref mac) => mac.$function_name(), #[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"), all(target_os = "android", feature = "native-bluetooth"), all(target_os = "macos", feature = "native-bluetooth"))))] &$enum_type::Empty(ref empty) => empty.$function_name(), #[cfg(feature = "bluetooth-test")] &$enum_type::Mock(ref fake) => fake.$function_name(), } }; (@with_bluez_offset, $enum_value: expr, $enum_type: ident, $function_name: ident) => { match $enum_value { #[cfg(all(target_os = "linux", feature = "native-bluetooth"))] &$enum_type::Bluez(ref bluez) => bluez.$function_name(None), #[cfg(all(target_os = "android", feature = "native-bluetooth"))] &$enum_type::Android(ref android) => android.$function_name(), #[cfg(all(target_os = "macos", feature = "native-bluetooth"))] &$enum_type::Mac(ref mac) => mac.$function_name(), #[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"), all(target_os = "android", feature = "native-bluetooth"), all(target_os = "macos", feature = "native-bluetooth"))))] &$enum_type::Empty(ref empty) => empty.$function_name(), #[cfg(feature = "bluetooth-test")] &$enum_type::Mock(ref fake) => fake.$function_name(), } }; ($enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => { match $enum_value { #[cfg(all(target_os = "linux", feature = "native-bluetooth"))] &$enum_type::Bluez(ref bluez) => bluez.$function_name($value), #[cfg(all(target_os = "android", feature = "native-bluetooth"))] &$enum_type::Android(ref android) => android.$function_name($value), #[cfg(all(target_os = "macos", feature = "native-bluetooth"))] &$enum_type::Mac(ref mac) => mac.$function_name($value), #[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"), all(target_os = "android", feature = "native-bluetooth"), all(target_os = "macos", feature = "native-bluetooth"))))] &$enum_type::Empty(ref empty) => empty.$function_name($value), #[cfg(feature = "bluetooth-test")] &$enum_type::Mock(ref fake) => fake.$function_name($value), } }; (@with_bluez_offset, $enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => { match $enum_value { #[cfg(all(target_os = "linux", feature = "native-bluetooth"))] &$enum_type::Bluez(ref bluez) => bluez.$function_name($value, None), #[cfg(all(target_os = "android", feature = "native-bluetooth"))] &$enum_type::Android(ref android) => android.$function_name($value), #[cfg(all(target_os = "macos", feature = "native-bluetooth"))] &$enum_type::Mac(ref mac) => mac.$function_name($value), #[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"), all(target_os = "android", feature = "native-bluetooth"), all(target_os = "macos", feature = "native-bluetooth"))))] &$enum_type::Empty(ref empty) => empty.$function_name($value), #[cfg(feature = "bluetooth-test")] &$enum_type::Mock(ref fake) => fake.$function_name($value), } }; ); #[cfg(feature = "bluetooth-test")] macro_rules! get_inner_and_call_test_func { ($enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => { match $enum_value { &$enum_type::Mock(ref fake) => fake.$function_name($value), _ => Err(Box::from( "Error! Test functions are not supported on real devices!", )), } }; ($enum_value: expr, $enum_type: ident, $function_name: ident) => { match $enum_value { &$enum_type::Mock(ref fake) => fake.$function_name(), _ => Err(Box::from( "Error! Test functions are not supported on real devices!", )), } }; } pub(crate) use get_inner_and_call; #[cfg(feature = "bluetooth-test")] pub(crate) use get_inner_and_call_test_func;