Buttplug sex toy control library
at dev 76 lines 2.4 kB view raw
1// Buttplug Rust Source Code File - See https://buttplug.io for more info. 2// 3// Copyright 2016-2024 Nonpolynomial Labs LLC. All rights reserved. 4// 5// Licensed under the BSD 3-Clause license. See LICENSE file in the project root 6// for full license information. 7 8use getset::{CopyGetters, Getters}; 9use serde::{Deserialize, Serialize}; 10 11use crate::message::{ButtplugDeviceMessageNameV0, v0::DeviceMessageInfoV0}; 12 13use super::{ClientDeviceMessageAttributesV1, DeviceAddedV1}; 14 15#[derive(Clone, Debug, PartialEq, Eq, Getters, CopyGetters, Serialize, Deserialize)] 16pub struct DeviceMessageInfoV1 { 17 #[serde(rename = "DeviceIndex")] 18 #[getset(get_copy = "pub")] 19 pub(in crate::message) device_index: u32, 20 #[serde(rename = "DeviceName")] 21 #[getset(get = "pub")] 22 pub(in crate::message) device_name: String, 23 #[serde(rename = "DeviceMessages")] 24 #[getset(get = "pub")] 25 pub(in crate::message) device_messages: ClientDeviceMessageAttributesV1, 26} 27 28impl From<DeviceAddedV1> for DeviceMessageInfoV1 { 29 fn from(device_added: DeviceAddedV1) -> Self { 30 Self { 31 device_index: device_added.device_index(), 32 device_name: device_added.device_name().clone(), 33 device_messages: device_added.device_messages().clone(), 34 } 35 } 36} 37 38impl From<DeviceMessageInfoV1> for DeviceMessageInfoV0 { 39 fn from(device_message_info: DeviceMessageInfoV1) -> Self { 40 // Convert to array of message types. 41 let mut device_messages: Vec<ButtplugDeviceMessageNameV0> = vec![]; 42 43 device_messages.push(ButtplugDeviceMessageNameV0::StopDeviceCmd); 44 if device_message_info 45 .device_messages() 46 .single_motor_vibrate_cmd() 47 .is_some() 48 { 49 device_messages.push(ButtplugDeviceMessageNameV0::SingleMotorVibrateCmd); 50 } 51 if device_message_info 52 .device_messages() 53 .fleshlight_launch_fw12_cmd() 54 .is_some() 55 { 56 device_messages.push(ButtplugDeviceMessageNameV0::FleshlightLaunchFW12Cmd); 57 } 58 if device_message_info 59 .device_messages() 60 .vorze_a10_cyclone_cmd() 61 .is_some() 62 { 63 device_messages.push(ButtplugDeviceMessageNameV0::VorzeA10CycloneCmd); 64 } 65 66 device_messages.sort(); 67 68 // SingleMotorVibrateCmd is added as part of the V1 conversion, so we 69 // can expect we'll have it here. 70 Self { 71 device_name: device_message_info.device_name().clone(), 72 device_index: device_message_info.device_index(), 73 device_messages, 74 } 75 } 76}