maa_framework/controller/
adb.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{error, internal};
4
5#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
6pub enum MaaAdbControllerTouchType {
7    Invalid,
8    Adb,
9    MiniTouch,
10    MaaTouch,
11    #[default]
12    AutoDetect,
13}
14
15#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
16pub enum MaaAdbControllerKeyType {
17    Invalid,
18    Adb,
19    MaaTouch,
20    #[default]
21    AutoDetect,
22}
23
24#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
25pub enum MaaAdbControlScreencapType {
26    #[default]
27    FastestWayCompatible,
28    RawByNetcat,
29    RawWithGzip,
30    Encode,
31    EncodeToFile,
32    MinicapDirect,
33    MinicapStream,
34    FastestLosslessWay,
35    FastestWay,
36    EmulatorExtras,
37}
38
39#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
40pub struct MaaAdbControllerType {
41    pub touch_type: MaaAdbControllerTouchType,
42    pub key_type: MaaAdbControllerKeyType,
43    pub screencap_type: MaaAdbControlScreencapType,
44}
45
46impl TryFrom<internal::MaaAdbControllerTypeEnum> for MaaAdbControllerType {
47    type Error = error::Error;
48
49    fn try_from(value: internal::MaaAdbControllerTypeEnum) -> Result<Self, Self::Error> {
50        let touch_type = match value & 0xFF {
51            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Invalid => {
52                MaaAdbControllerTouchType::Invalid
53            }
54            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_Adb => {
55                MaaAdbControllerTouchType::Adb
56            }
57            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_MiniTouch => {
58                MaaAdbControllerTouchType::MiniTouch
59            }
60            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_MaaTouch => {
61                MaaAdbControllerTouchType::MaaTouch
62            }
63            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_AutoDetect => {
64                MaaAdbControllerTouchType::AutoDetect
65            }
66            _ => return Err(error::Error::MaaAdbControllerTypeConversionError(value)),
67        };
68
69        let key_type = match value & 0xFF00 {
70            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Invalid => {
71                MaaAdbControllerKeyType::Invalid
72            }
73            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_Adb => {
74                MaaAdbControllerKeyType::Adb
75            }
76            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_MaaTouch => {
77                MaaAdbControllerKeyType::MaaTouch
78            }
79            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_AutoDetect => {
80                MaaAdbControllerKeyType::AutoDetect
81            }
82            _ => return Err(error::Error::MaaAdbControllerTypeConversionError(value)),
83        };
84
85        let screencap_type = match value & 0xFF0000 {
86            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestWay_Compatible => MaaAdbControlScreencapType::FastestWayCompatible,
87            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_RawByNetcat => MaaAdbControlScreencapType::RawByNetcat,
88            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_RawWithGzip => MaaAdbControlScreencapType::RawWithGzip,
89            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_Encode => MaaAdbControlScreencapType::Encode,
90            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_EncodeToFile => MaaAdbControlScreencapType::EncodeToFile,
91            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_MinicapDirect => MaaAdbControlScreencapType::MinicapDirect,
92            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_MinicapStream => MaaAdbControlScreencapType::MinicapStream,
93            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestLosslessWay => MaaAdbControlScreencapType::FastestLosslessWay,
94            internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestWay => MaaAdbControlScreencapType::FastestWay,
95            _ => return Err(error::Error::MaaAdbControllerTypeConversionError(value))
96        };
97
98        Ok(MaaAdbControllerType {
99            touch_type,
100            key_type,
101            screencap_type,
102        })
103    }
104}
105
106impl From<MaaAdbControllerType> for internal::MaaAdbControllerTypeEnum {
107    fn from(value: MaaAdbControllerType) -> Self {
108        let touch_type = match value.touch_type {
109            MaaAdbControllerTouchType::Invalid => {
110                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Invalid
111            }
112            MaaAdbControllerTouchType::Adb => {
113                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_Adb
114            }
115            MaaAdbControllerTouchType::MiniTouch => {
116                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_MiniTouch
117            }
118            MaaAdbControllerTouchType::MaaTouch => {
119                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_MaaTouch
120            }
121            MaaAdbControllerTouchType::AutoDetect => {
122                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Touch_AutoDetect
123            }
124        };
125
126        let key_type = match value.key_type {
127            MaaAdbControllerKeyType::Invalid => {
128                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Invalid
129            }
130            MaaAdbControllerKeyType::Adb => {
131                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_Adb
132            }
133            MaaAdbControllerKeyType::MaaTouch => {
134                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_MaaTouch
135            }
136            MaaAdbControllerKeyType::AutoDetect => {
137                internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Key_AutoDetect
138            }
139        };
140
141        let screencap_type = match value.screencap_type {
142            MaaAdbControlScreencapType::FastestWayCompatible => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestWay_Compatible,
143            MaaAdbControlScreencapType::RawByNetcat => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_RawByNetcat,
144            MaaAdbControlScreencapType::RawWithGzip => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_RawWithGzip,
145            MaaAdbControlScreencapType::Encode => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_Encode,
146            MaaAdbControlScreencapType::EncodeToFile => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_EncodeToFile,
147            MaaAdbControlScreencapType::MinicapDirect => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_MinicapDirect,
148            MaaAdbControlScreencapType::MinicapStream => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_MinicapStream,
149            MaaAdbControlScreencapType::FastestLosslessWay => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestLosslessWay,
150            MaaAdbControlScreencapType::FastestWay => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_FastestWay,
151            MaaAdbControlScreencapType::EmulatorExtras => internal::MaaAdbControllerTypeEnum_MaaAdbControllerType_Screencap_EmulatorExtras
152        };
153
154        touch_type | key_type | screencap_type
155    }
156}