Buttplug sex toy control library
1pub mod svakom_alex;
2pub mod svakom_alex_v2;
3pub mod svakom_avaneo;
4pub mod svakom_barnard;
5pub mod svakom_barney;
6pub mod svakom_dice;
7pub mod svakom_dt250a;
8pub mod svakom_iker;
9pub mod svakom_jordan;
10pub mod svakom_pulse;
11pub mod svakom_sam;
12pub mod svakom_sam2;
13pub mod svakom_suitcase;
14pub mod svakom_tarax;
15pub mod svakom_v1;
16pub mod svakom_v2;
17pub mod svakom_v3;
18pub mod svakom_v4;
19pub mod svakom_v5;
20pub mod svakom_v6;
21
22use buttplug_core::errors::ButtplugDeviceError;
23use buttplug_server_device_config::{
24 ProtocolCommunicationSpecifier,
25 ServerDeviceDefinition,
26 UserDeviceIdentifier,
27};
28
29use crate::device::{
30 hardware::Hardware,
31 protocol::{
32 ProtocolHandler,
33 ProtocolIdentifier,
34 ProtocolInitializer,
35 generic_protocol_initializer_setup,
36 },
37};
38use async_trait::async_trait;
39use std::sync::Arc;
40
41generic_protocol_initializer_setup!(Svakom, "svakom");
42
43#[derive(Default)]
44pub struct SvakomInitializer {}
45
46#[async_trait]
47impl ProtocolInitializer for SvakomInitializer {
48 async fn initialize(
49 &mut self,
50 hardware: Arc<Hardware>,
51 def: &ServerDeviceDefinition,
52 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> {
53 if let Some(variant) = def.protocol_variant() {
54 match variant.as_str() {
55 "svakom_alex" => Ok(Arc::new(svakom_alex::SvakomAlex::default())),
56 "svakom_alex_v2" => Ok(Arc::new(svakom_alex_v2::SvakomAlexV2::default())),
57 //"svakom_avaneo" => Ok(Arc::new(svakom_avaneo::SvakomAvaNeo::default())),
58 "svakom_barnard" => Ok(Arc::new(svakom_barnard::SvakomBarnard::default())),
59 "svakom_barney" => Ok(Arc::new(svakom_barney::SvakomBarney::default())),
60 "svakom_dice" => Ok(Arc::new(svakom_dice::SvakomDice::default())),
61 //"svakom_dt250a" => svakom_dt250a::SvakomDT250AInitializer::default().initialize(hardware, def).await,
62 "svakom_iker" => Ok(Arc::new(svakom_iker::SvakomIker::default())),
63 "svakom_jordan" => Ok(Arc::new(svakom_jordan::SvakomJordan::default())),
64 "svakom_pulse" => Ok(Arc::new(svakom_pulse::SvakomPulse::default())),
65 "svakom_sam" => {
66 svakom_sam::SvakomSamInitializer::default()
67 .initialize(hardware, def)
68 .await
69 }
70 "svakom_sam2" => Ok(Arc::new(svakom_sam2::SvakomSam2::default())),
71 //"svakom_suitcase" => Ok(Arc::new(svakom_suitcase::SvakomSuitcase::default())),
72 //"svakom_tarax" => Ok(Arc::new(svakom_tarax::SvakomTaraX::default())),
73 "svakom_v1" => Ok(Arc::new(svakom_v1::SvakomV1::default())),
74 "svakom_v2" => Ok(Arc::new(svakom_v2::SvakomV2::default())),
75 "svakom_v3" => Ok(Arc::new(svakom_v3::SvakomV3::default())),
76 "svakom_v4" => Ok(Arc::new(svakom_v4::SvakomV4::default())),
77 "svakom_v5" => Ok(Arc::new(svakom_v5::SvakomV5::default())),
78 "svakom_v6" => Ok(Arc::new(svakom_v6::SvakomV6::default())),
79 _ => Err(ButtplugDeviceError::ProtocolNotImplemented(format!(
80 "No protocol implementation for Vorze Device {}",
81 hardware.name()
82 ))),
83 }
84 } else {
85 Err(ButtplugDeviceError::ProtocolNotImplemented(format!(
86 "No protocol implementation for Vorze Device {}",
87 hardware.name()
88 )))
89 }
90 }
91}