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}