Buttplug sex toy control library
at dev 59 lines 1.8 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 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}