maa_framework/
internal.rs1#![allow(dead_code)]
2#![allow(non_upper_case_globals)]
3#![allow(non_camel_case_types)]
4#![allow(non_snake_case)]
5
6use crate::{msg::MaaMsg, CallbackHandler};
7
8#[cfg(not(docsrs))]
9include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
10
11#[cfg(docsrs)]
12include!("../build/pregenerated_bindings.rs");
13
14#[macro_export]
15macro_rules! maa_bool {
16 ($v:expr) => {
17 $v != 0
18 };
19
20 ($v:expr, $e:ident) => {
21 if $v != 0 {
22 Ok(())
23 } else {
24 Err(Error::$e)
25 }
26 };
27
28 ($v:expr, $e:ident, $c:expr) => {
29 if $v != 0 {
30 Ok(())
31 } else {
32 Err(Error::$e($c))
33 }
34 };
35}
36
37#[macro_export]
38macro_rules! string {
39 ($string_view:expr) => {
40 unsafe {
41 std::ffi::CStr::from_ptr($string_view)
42 .to_str()
43 .unwrap()
44 .to_string()
45 }
46 };
47}
48
49#[allow(clippy::unwrap_used)]
50#[inline]
51pub(crate) fn to_cstring(s: &str) -> *const i8 {
52 std::ffi::CString::new(s).unwrap().into_raw()
53}
54
55pub(crate) unsafe extern "C" fn callback_handler<T: CallbackHandler>(
56 msg: *const std::os::raw::c_char,
57 details_json: *const std::os::raw::c_char,
58 user_data: *mut std::os::raw::c_void,
59) {
60 let msg = string!(msg);
61 let details_json = string!(details_json);
62 let maa_msg = MaaMsg::from(&msg, &details_json).unwrap();
63 let callback_handler = &mut *(user_data as *mut T);
64 callback_handler.handle(maa_msg);
65}