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