maa_framework/custom/
custom_action.rs

1use crate::{buffer::rect_buffer::MaaRectBuffer, internal, string, sync_context::MaaSyncContext};
2
3#[allow(unused)]
4pub trait MaaCustomAction {
5    fn run(
6        &mut self,
7        sync_context: MaaSyncContext,
8        task_name: String,
9        custom_action_param: String,
10        cur_box: MaaRectBuffer,
11        cur_rec_detail: String,
12    ) -> bool {
13        false
14    }
15    fn stop(&mut self) {}
16}
17
18pub(crate) unsafe extern "C" fn maa_custom_action_run<A>(
19    sync_context: internal::MaaSyncContextHandle,
20    task_name: internal::MaaStringView,
21    custom_action_param: internal::MaaStringView,
22    cur_box: internal::MaaRectHandle,
23    cur_rec_detail: internal::MaaStringView,
24    action: internal::MaaTransparentArg,
25) -> internal::MaaBool
26where
27    A: MaaCustomAction,
28{
29    let custom_action = &mut *(action as *mut A);
30    let sync_context = MaaSyncContext::from(sync_context);
31    let task_name = string!(task_name);
32    let custom_action_param = string!(custom_action_param);
33    let cur_box = MaaRectBuffer::from(cur_box);
34    let cur_rec_detail = string!(cur_rec_detail);
35    let ret = custom_action.run(
36        sync_context,
37        task_name,
38        custom_action_param,
39        cur_box,
40        cur_rec_detail,
41    );
42
43    internal::MaaBool::from(ret)
44}
45
46pub(crate) unsafe extern "C" fn maa_custom_action_stop<A>(action: internal::MaaTransparentArg)
47where
48    A: MaaCustomAction,
49{
50    let custom_action = &mut *(action as *mut A);
51    custom_action.stop();
52}