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 super::{ClientDeviceMessageAttributesV2, device_message_info::DeviceMessageInfoV2};
9use crate::message::v1::{DeviceAddedV1, DeviceMessageInfoV1};
10use buttplug_core::{
11 errors::ButtplugMessageError,
12 message::{ButtplugMessage, ButtplugMessageFinalizer, ButtplugMessageValidator},
13};
14
15use getset::{CopyGetters, Getters};
16
17use serde::{Deserialize, Serialize};
18
19#[derive(
20 ButtplugMessage, Clone, Debug, PartialEq, Eq, Getters, CopyGetters, Serialize, Deserialize,
21)]
22pub struct DeviceAddedV2 {
23 #[serde(rename = "Id")]
24 pub(in crate::message) id: u32,
25 #[serde(rename = "DeviceIndex")]
26 #[getset(get_copy = "pub")]
27 pub(in crate::message) device_index: u32,
28 #[serde(rename = "DeviceName")]
29 #[getset(get = "pub")]
30 pub(in crate::message) device_name: String,
31 #[serde(rename = "DeviceMessages")]
32 #[getset(get = "pub")]
33 pub(in crate::message) device_messages: ClientDeviceMessageAttributesV2,
34}
35
36impl From<DeviceAddedV2> for DeviceAddedV1 {
37 fn from(msg: DeviceAddedV2) -> Self {
38 let id = msg.id();
39 let dmiv2 = DeviceMessageInfoV2::from(msg);
40 let dmiv1 = DeviceMessageInfoV1::from(dmiv2);
41
42 Self {
43 id,
44 device_index: dmiv1.device_index(),
45 device_name: dmiv1.device_name().clone(),
46 device_messages: dmiv1.device_messages().clone(),
47 }
48 }
49}
50
51impl ButtplugMessageValidator for DeviceAddedV2 {
52 fn is_valid(&self) -> Result<(), ButtplugMessageError> {
53 self.is_system_id(self.id)
54 }
55}
56
57impl ButtplugMessageFinalizer for DeviceAddedV2 {
58}