Buttplug sex toy control library
1use std::{collections::HashMap, sync::Arc};
2
3use crate::device::protocol::ProtocolIdentifierFactory;
4
5// Utility mods
6pub mod fleshlight_launch_helper;
7
8// Since users can pick and choose protocols, we need all of these to be public.
9pub mod activejoy;
10pub mod adrienlastic;
11pub mod amorelie_joy;
12pub mod aneros;
13pub mod ankni;
14pub mod bananasome;
15pub mod cachito;
16pub mod cowgirl;
17pub mod cowgirl_cone;
18pub mod cupido;
19pub mod deepsire;
20pub mod feelingso;
21pub mod fleshy_thrust;
22pub mod foreo;
23pub mod fox;
24pub mod fredorch;
25pub mod fredorch_rotary;
26pub mod galaku;
27pub mod galaku_pump;
28pub mod hgod;
29pub mod hismith;
30pub mod hismith_mini;
31pub mod htk_bm;
32pub mod itoys;
33pub mod jejoue;
34pub mod joyhub;
35pub mod kgoal_boost;
36pub mod kiiroo_powershot;
37pub mod kiiroo_prowand;
38pub mod kiiroo_spot;
39pub mod kiiroo_v2;
40pub mod kiiroo_v21;
41pub mod kiiroo_v21_initialized;
42pub mod kiiroo_v2_vibrator;
43pub mod kiiroo_v3;
44pub mod kizuna;
45pub mod lelo_harmony;
46pub mod lelof1s;
47pub mod lelof1sv2;
48pub mod leten;
49pub mod libo_elle;
50pub mod libo_shark;
51pub mod libo_vibes;
52pub mod lioness;
53pub mod loob;
54pub mod lovedistance;
55pub mod lovehoney_desire;
56pub mod lovense;
57// pub mod lovense_connect_service;
58pub mod lovenuts;
59pub mod luvmazer;
60pub mod magic_motion_v1;
61pub mod magic_motion_v2;
62pub mod magic_motion_v3;
63pub mod magic_motion_v4;
64pub mod mannuo;
65pub mod maxpro;
66pub mod meese;
67pub mod mizzzee;
68pub mod mizzzee_v2;
69pub mod mizzzee_v3;
70pub mod monsterpub;
71pub mod motorbunny;
72pub mod mysteryvibe;
73pub mod mysteryvibe_v2;
74pub mod nextlevelracing;
75pub mod nexus_revo;
76pub mod nintendo_joycon;
77pub mod nobra;
78pub mod omobo;
79pub mod patoo;
80pub mod picobong;
81pub mod pink_punch;
82pub mod prettylove;
83pub mod raw_protocol;
84pub mod realov;
85pub mod sakuraneko;
86pub mod satisfyer;
87pub mod sensee;
88pub mod sensee_capsule;
89pub mod sensee_v2;
90pub mod serveu;
91pub mod sexverse_lg389;
92pub mod sexverse_v1;
93pub mod sexverse_v2;
94pub mod sexverse_v3;
95pub mod sexverse_v4;
96pub mod sexverse_v5;
97pub mod svakom;
98pub mod synchro;
99pub mod tcode_v03;
100pub mod thehandy;
101pub mod tryfun;
102pub mod tryfun_blackhole;
103pub mod tryfun_meta2;
104pub mod vibcrafter;
105pub mod vibratissimo;
106pub mod vorze_sa;
107pub mod wetoy;
108pub mod wevibe;
109pub mod wevibe8bit;
110pub mod wevibe_chorus;
111pub mod xibao;
112pub mod xinput;
113pub mod xiuxiuda;
114pub mod xuanhuan;
115pub mod youcups;
116pub mod youou;
117pub mod zalo;
118
119pub fn get_default_protocol_map() -> HashMap<String, Arc<dyn ProtocolIdentifierFactory>> {
120 let mut map = HashMap::new();
121 fn add_to_protocol_map<T>(
122 map: &mut HashMap<String, Arc<dyn ProtocolIdentifierFactory>>,
123 factory: T,
124 ) where
125 T: ProtocolIdentifierFactory + 'static,
126 {
127 let factory = Arc::new(factory);
128 map.insert(factory.identifier().to_owned(), factory);
129 }
130
131 add_to_protocol_map(
132 &mut map,
133 activejoy::setup::ActiveJoyIdentifierFactory::default(),
134 );
135 add_to_protocol_map(
136 &mut map,
137 adrienlastic::setup::AdrienLasticIdentifierFactory::default(),
138 );
139 add_to_protocol_map(
140 &mut map,
141 amorelie_joy::setup::AmorelieJoyIdentifierFactory::default(),
142 );
143 add_to_protocol_map(&mut map, aneros::setup::AnerosIdentifierFactory::default());
144 add_to_protocol_map(&mut map, ankni::setup::AnkniIdentifierFactory::default());
145 add_to_protocol_map(
146 &mut map,
147 bananasome::setup::BananasomeIdentifierFactory::default(),
148 );
149 add_to_protocol_map(
150 &mut map,
151 cachito::setup::CachitoIdentifierFactory::default(),
152 );
153 add_to_protocol_map(
154 &mut map,
155 cowgirl::setup::CowgirlIdentifierFactory::default(),
156 );
157 add_to_protocol_map(
158 &mut map,
159 cowgirl_cone::setup::CowgirlConeIdentifierFactory::default(),
160 );
161 add_to_protocol_map(&mut map, cupido::setup::CupidoIdentifierFactory::default());
162 add_to_protocol_map(
163 &mut map,
164 deepsire::setup::DeepSireIdentifierFactory::default(),
165 );
166 add_to_protocol_map(
167 &mut map,
168 hismith::setup::HismithIdentifierFactory::default(),
169 );
170 add_to_protocol_map(
171 &mut map,
172 hismith_mini::setup::HismithMiniIdentifierFactory::default(),
173 );
174 add_to_protocol_map(&mut map, htk_bm::setup::HtkBmIdentifierFactory::default());
175 add_to_protocol_map(
176 &mut map,
177 thehandy::setup::TheHandyIdentifierFactory::default(),
178 );
179
180 add_to_protocol_map(
181 &mut map,
182 feelingso::setup::FeelingSoIdentifierFactory::default(),
183 );
184 add_to_protocol_map(
185 &mut map,
186 fleshy_thrust::setup::FleshyThrustIdentifierFactory::default(),
187 );
188 add_to_protocol_map(&mut map, foreo::setup::ForeoIdentifierFactory::default());
189 add_to_protocol_map(&mut map, fox::setup::FoxIdentifierFactory::default());
190 add_to_protocol_map(
191 &mut map,
192 fredorch::setup::FredorchIdentifierFactory::default(),
193 );
194 add_to_protocol_map(
195 &mut map,
196 fredorch_rotary::setup::FredorchRotaryIdentifierFactory::default(),
197 );
198
199 add_to_protocol_map(&mut map, hgod::setup::HgodIdentifierFactory::default());
200
201 add_to_protocol_map(
202 &mut map,
203 galaku_pump::setup::GalakuPumpIdentifierFactory::default(),
204 );
205
206 add_to_protocol_map(&mut map, galaku::setup::GalakuIdentifierFactory::default());
207
208 add_to_protocol_map(&mut map, itoys::setup::IToysIdentifierFactory::default());
209 add_to_protocol_map(&mut map, jejoue::setup::JeJoueIdentifierFactory::default());
210 add_to_protocol_map(
211 &mut map,
212 joyhub::joyhub::setup::JoyHubIdentifierFactory::default(),
213 );
214 add_to_protocol_map(
215 &mut map,
216 joyhub::joyhub_v2::setup::JoyHubV2IdentifierFactory::default(),
217 );
218 add_to_protocol_map(
219 &mut map,
220 joyhub::joyhub_v3::setup::JoyHubV3IdentifierFactory::default(),
221 );
222
223 add_to_protocol_map(
224 &mut map,
225 joyhub::joyhub_v4::setup::JoyHubV4IdentifierFactory::default(),
226 );
227 add_to_protocol_map(
228 &mut map,
229 joyhub::joyhub_v5::setup::JoyHubV5IdentifierFactory::default(),
230 );
231 add_to_protocol_map(
232 &mut map,
233 joyhub::joyhub_v6::setup::JoyHubV6IdentifierFactory::default(),
234 );
235 add_to_protocol_map(
236 &mut map,
237 kiiroo_powershot::setup::KiirooPowerShotIdentifierFactory::default(),
238 );
239 add_to_protocol_map(
240 &mut map,
241 kiiroo_prowand::setup::KiirooProWandIdentifierFactory::default(),
242 );
243 add_to_protocol_map(
244 &mut map,
245 kiiroo_spot::setup::KiirooSpotIdentifierFactory::default(),
246 );
247 add_to_protocol_map(
248 &mut map,
249 kiiroo_v2::setup::KiirooV2IdentifierFactory::default(),
250 );
251 add_to_protocol_map(
252 &mut map,
253 kiiroo_v3::setup::KiirooV3IdentifierFactory::default(),
254 );
255 add_to_protocol_map(
256 &mut map,
257 kiiroo_v2_vibrator::setup::KiirooV2VibratorIdentifierFactory::default(),
258 );
259 add_to_protocol_map(
260 &mut map,
261 kiiroo_v21::setup::KiirooV21IdentifierFactory::default(),
262 );
263 add_to_protocol_map(
264 &mut map,
265 kiiroo_v21_initialized::setup::KiirooV21InitializedIdentifierFactory::default(),
266 );
267 add_to_protocol_map(&mut map, kizuna::setup::KizunaIdentifierFactory::default());
268 add_to_protocol_map(
269 &mut map,
270 lelof1s::setup::LeloF1sIdentifierFactory::default(),
271 );
272 add_to_protocol_map(
273 &mut map,
274 lelof1sv2::setup::LeloF1sV2IdentifierFactory::default(),
275 );
276 add_to_protocol_map(&mut map, leten::setup::LetenIdentifierFactory::default());
277 add_to_protocol_map(
278 &mut map,
279 lelo_harmony::setup::LeloHarmonyIdentifierFactory::default(),
280 );
281 add_to_protocol_map(
282 &mut map,
283 libo_elle::setup::LiboElleIdentifierFactory::default(),
284 );
285 add_to_protocol_map(
286 &mut map,
287 libo_shark::setup::LiboSharkIdentifierFactory::default(),
288 );
289 add_to_protocol_map(
290 &mut map,
291 libo_vibes::setup::LiboVibesIdentifierFactory::default(),
292 );
293 add_to_protocol_map(
294 &mut map,
295 lioness::setup::LionessIdentifierFactory::default(),
296 );
297 add_to_protocol_map(&mut map, loob::setup::LoobIdentifierFactory::default());
298 add_to_protocol_map(
299 &mut map,
300 lovehoney_desire::setup::LovehoneyDesireIdentifierFactory::default(),
301 );
302 add_to_protocol_map(
303 &mut map,
304 lovedistance::setup::LoveDistanceIdentifierFactory::default(),
305 );
306 add_to_protocol_map(
307 &mut map,
308 lovense::setup::LovenseIdentifierFactory::default(),
309 );
310
311 // add_to_protocol_map(
312 // &mut map,
313 // lovense_connect_service::setup::LovenseConnectServiceIdentifierFactory::default(),
314 // );
315 add_to_protocol_map(
316 &mut map,
317 lovenuts::setup::LoveNutsIdentifierFactory::default(),
318 );
319 add_to_protocol_map(
320 &mut map,
321 luvmazer::setup::LuvmazerIdentifierFactory::default(),
322 );
323 add_to_protocol_map(
324 &mut map,
325 magic_motion_v1::setup::MagicMotionV1IdentifierFactory::default(),
326 );
327 add_to_protocol_map(
328 &mut map,
329 magic_motion_v2::setup::MagicMotionV2IdentifierFactory::default(),
330 );
331 add_to_protocol_map(
332 &mut map,
333 magic_motion_v3::setup::MagicMotionV3IdentifierFactory::default(),
334 );
335 add_to_protocol_map(
336 &mut map,
337 magic_motion_v4::setup::MagicMotionV4IdentifierFactory::default(),
338 );
339 add_to_protocol_map(&mut map, mannuo::setup::ManNuoIdentifierFactory::default());
340 add_to_protocol_map(&mut map, maxpro::setup::MaxproIdentifierFactory::default());
341 add_to_protocol_map(&mut map, meese::setup::MeeseIdentifierFactory::default());
342 add_to_protocol_map(
343 &mut map,
344 mizzzee::setup::MizzZeeIdentifierFactory::default(),
345 );
346 add_to_protocol_map(
347 &mut map,
348 mizzzee_v2::setup::MizzZeeV2IdentifierFactory::default(),
349 );
350 add_to_protocol_map(
351 &mut map,
352 mizzzee_v3::setup::MizzZeeV3IdentifierFactory::default(),
353 );
354 add_to_protocol_map(
355 &mut map,
356 monsterpub::setup::MonsterPubIdentifierFactory::default(),
357 );
358 add_to_protocol_map(
359 &mut map,
360 motorbunny::setup::MotorbunnyIdentifierFactory::default(),
361 );
362 add_to_protocol_map(
363 &mut map,
364 mysteryvibe::setup::MysteryVibeIdentifierFactory::default(),
365 );
366 add_to_protocol_map(
367 &mut map,
368 mysteryvibe_v2::setup::MysteryVibeV2IdentifierFactory::default(),
369 );
370 add_to_protocol_map(
371 &mut map,
372 nexus_revo::setup::NexusRevoIdentifierFactory::default(),
373 );
374 add_to_protocol_map(
375 &mut map,
376 nextlevelracing::setup::NextLevelRacingIdentifierFactory::default(),
377 );
378 add_to_protocol_map(
379 &mut map,
380 nintendo_joycon::setup::NintendoJoyconIdentifierFactory::default(),
381 );
382 add_to_protocol_map(&mut map, nobra::setup::NobraIdentifierFactory::default());
383 add_to_protocol_map(&mut map, omobo::setup::OmoboIdentifierFactory::default());
384 add_to_protocol_map(&mut map, patoo::setup::PatooIdentifierFactory::default());
385 add_to_protocol_map(
386 &mut map,
387 picobong::setup::PicobongIdentifierFactory::default(),
388 );
389 add_to_protocol_map(
390 &mut map,
391 pink_punch::setup::PinkPunchIdentifierFactory::default(),
392 );
393 add_to_protocol_map(
394 &mut map,
395 prettylove::setup::PrettyLoveIdentifierFactory::default(),
396 );
397 add_to_protocol_map(
398 &mut map,
399 raw_protocol::setup::RawProtocolIdentifierFactory::default(),
400 );
401 add_to_protocol_map(&mut map, realov::setup::RealovIdentifierFactory::default());
402 add_to_protocol_map(
403 &mut map,
404 sakuraneko::setup::SakuranekoIdentifierFactory::default(),
405 );
406 add_to_protocol_map(
407 &mut map,
408 satisfyer::setup::SatisfyerIdentifierFactory::default(),
409 );
410 add_to_protocol_map(&mut map, sensee::setup::SenseeIdentifierFactory::default());
411 add_to_protocol_map(
412 &mut map,
413 sensee_capsule::setup::SenseeCapsuleIdentifierFactory::default(),
414 );
415 add_to_protocol_map(
416 &mut map,
417 sensee_v2::setup::SenseeV2IdentifierFactory::default(),
418 );
419 add_to_protocol_map(
420 &mut map,
421 sexverse_lg389::setup::SexverseLG389IdentifierFactory::default(),
422 );
423 add_to_protocol_map(
424 &mut map,
425 sexverse_v1::setup::SexverseV1IdentifierFactory::default(),
426 );
427 add_to_protocol_map(
428 &mut map,
429 sexverse_v2::setup::SexverseV2IdentifierFactory::default(),
430 );
431 add_to_protocol_map(
432 &mut map,
433 sexverse_v3::setup::SexverseV3IdentifierFactory::default(),
434 );
435 add_to_protocol_map(
436 &mut map,
437 sexverse_v4::setup::SexverseV4IdentifierFactory::default(),
438 );
439 add_to_protocol_map(
440 &mut map,
441 sexverse_v5::setup::SexverseV5IdentifierFactory::default(),
442 );
443 add_to_protocol_map(&mut map, serveu::setup::ServeUIdentifierFactory::default());
444 add_to_protocol_map(
445 &mut map,
446 svakom::svakom_avaneo::setup::SvakomAvaNeoIdentifierFactory::default(),
447 );
448 add_to_protocol_map(
449 &mut map,
450 svakom::svakom_alex::setup::SvakomAlexIdentifierFactory::default(),
451 );
452 add_to_protocol_map(
453 &mut map,
454 svakom::svakom_alex_v2::setup::SvakomAlexV2IdentifierFactory::default(),
455 );
456 add_to_protocol_map(
457 &mut map,
458 svakom::svakom_barnard::setup::SvakomBarnardIdentifierFactory::default(),
459 );
460 add_to_protocol_map(
461 &mut map,
462 svakom::svakom_barney::setup::SvakomBarneyIdentifierFactory::default(),
463 );
464 add_to_protocol_map(
465 &mut map,
466 svakom::svakom_dice::setup::SvakomDiceIdentifierFactory::default(),
467 );
468 add_to_protocol_map(
469 &mut map,
470 svakom::svakom_dt250a::setup::SvakomDT250AIdentifierFactory::default(),
471 );
472 add_to_protocol_map(
473 &mut map,
474 svakom::svakom_iker::setup::SvakomIkerIdentifierFactory::default(),
475 );
476 add_to_protocol_map(
477 &mut map,
478 svakom::svakom_jordan::setup::SvakomJordanIdentifierFactory::default(),
479 );
480 add_to_protocol_map(
481 &mut map,
482 svakom::svakom_pulse::setup::SvakomPulseIdentifierFactory::default(),
483 );
484 add_to_protocol_map(
485 &mut map,
486 svakom::svakom_sam::setup::SvakomSamIdentifierFactory::default(),
487 );
488 add_to_protocol_map(
489 &mut map,
490 svakom::svakom_sam2::setup::SvakomSam2IdentifierFactory::default(),
491 );
492 add_to_protocol_map(
493 &mut map,
494 svakom::svakom_suitcase::setup::SvakomSuitcaseIdentifierFactory::default(),
495 );
496 add_to_protocol_map(
497 &mut map,
498 svakom::svakom_tarax::setup::SvakomTaraXIdentifierFactory::default(),
499 );
500 add_to_protocol_map(
501 &mut map,
502 svakom::svakom_v1::setup::SvakomV1IdentifierFactory::default(),
503 );
504 add_to_protocol_map(
505 &mut map,
506 svakom::svakom_v2::setup::SvakomV2IdentifierFactory::default(),
507 );
508 add_to_protocol_map(
509 &mut map,
510 svakom::svakom_v3::setup::SvakomV3IdentifierFactory::default(),
511 );
512 add_to_protocol_map(
513 &mut map,
514 svakom::svakom_v4::setup::SvakomV4IdentifierFactory::default(),
515 );
516 add_to_protocol_map(
517 &mut map,
518 svakom::svakom_v5::setup::SvakomV5IdentifierFactory::default(),
519 );
520 add_to_protocol_map(
521 &mut map,
522 svakom::svakom_v6::setup::SvakomV6IdentifierFactory::default(),
523 );
524 add_to_protocol_map(
525 &mut map,
526 synchro::setup::SynchroIdentifierFactory::default(),
527 );
528 add_to_protocol_map(&mut map, tryfun::setup::TryFunIdentifierFactory::default());
529 add_to_protocol_map(
530 &mut map,
531 tryfun_blackhole::setup::TryFunBlackHoleIdentifierFactory::default(),
532 );
533 add_to_protocol_map(
534 &mut map,
535 tryfun_meta2::setup::TryFunMeta2IdentifierFactory::default(),
536 );
537 add_to_protocol_map(
538 &mut map,
539 tcode_v03::setup::TCodeV03IdentifierFactory::default(),
540 );
541 add_to_protocol_map(
542 &mut map,
543 vibcrafter::setup::VibCrafterIdentifierFactory::default(),
544 );
545 add_to_protocol_map(
546 &mut map,
547 vibratissimo::setup::VibratissimoIdentifierFactory::default(),
548 );
549 add_to_protocol_map(
550 &mut map,
551 vorze_sa::setup::VorzeSAIdentifierFactory::default(),
552 );
553 add_to_protocol_map(&mut map, wetoy::setup::WeToyIdentifierFactory::default());
554 add_to_protocol_map(&mut map, wevibe::setup::WeVibeIdentifierFactory::default());
555 add_to_protocol_map(
556 &mut map,
557 wevibe8bit::setup::WeVibe8BitIdentifierFactory::default(),
558 );
559 add_to_protocol_map(
560 &mut map,
561 wevibe_chorus::setup::WeVibeChorusIdentifierFactory::default(),
562 );
563 add_to_protocol_map(&mut map, xibao::setup::XibaoIdentifierFactory::default());
564 add_to_protocol_map(&mut map, xinput::setup::XInputIdentifierFactory::default());
565 add_to_protocol_map(
566 &mut map,
567 xiuxiuda::setup::XiuxiudaIdentifierFactory::default(),
568 );
569 add_to_protocol_map(
570 &mut map,
571 xuanhuan::setup::XuanhuanIdentifierFactory::default(),
572 );
573 add_to_protocol_map(
574 &mut map,
575 youcups::setup::YoucupsIdentifierFactory::default(),
576 );
577 add_to_protocol_map(&mut map, youou::setup::YououIdentifierFactory::default());
578 add_to_protocol_map(&mut map, zalo::setup::ZaloIdentifierFactory::default());
579 add_to_protocol_map(
580 &mut map,
581 kgoal_boost::setup::KGoalBoostIdentifierFactory::default(),
582 );
583 map
584}