maa_framework/custom/
custom_action.rs1use 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}