Buttplug sex toy control library
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}