maa_framework/custom/
custom_recognizer.rs

1use crate::{
2    buffer::{image_buffer::MaaImageBuffer, rect_buffer::MaaRectBuffer},
3    internal,
4    string,
5    sync_context::MaaSyncContext,
6};
7
8#[allow(unused)]
9pub trait MaaCustomRecognizer {
10    fn analyze(
11        &mut self,
12        sync_context: MaaSyncContext,
13        image: MaaImageBuffer,
14        task_name: String,
15        custom_recognition_param: String,
16        out_rect: MaaRectBuffer,
17    ) -> Option<String> {
18        None
19    }
20}
21
22pub(crate) unsafe extern "C" fn custom_recognier_analyze<R>(
23    sync_context: internal::MaaSyncContextHandle,
24    image: internal::MaaImageBufferHandle,
25    task_name: internal::MaaStringView,
26    custom_recognition_param: internal::MaaStringView,
27    recognizer: internal::MaaTransparentArg,
28    out_box: internal::MaaRectHandle,
29    out_string: internal::MaaStringBufferHandle,
30) -> internal::MaaBool
31where
32    R: MaaCustomRecognizer,
33{
34    let sync_context = MaaSyncContext::from(sync_context);
35    let image = MaaImageBuffer::from(image);
36    let task_name = string!(task_name);
37    let custom_recognition_param = string!(custom_recognition_param);
38    let recognizer = &mut *(recognizer as *mut R);
39    let out_box = MaaRectBuffer::from(out_box);
40    match recognizer.analyze(
41        sync_context,
42        image,
43        task_name,
44        custom_recognition_param,
45        out_box,
46    ) {
47        Some(string) => {
48            let string = internal::to_cstring(&string);
49            internal::MaaSetString(out_string, string);
50            internal::MaaBool::from(true)
51        }
52        None => internal::MaaBool::from(false),
53    }
54}