maa_framework/controller/
adb.rs1use 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}