Buttplug sex toy control library
at dev 66 lines 1.7 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 super::device_message_info::DeviceMessageInfoV1; 9use crate::message::{ 10 v0::{DeviceListV0, DeviceMessageInfoV0}, 11 v2::DeviceListV2, 12}; 13use buttplug_core::{ 14 errors::ButtplugMessageError, 15 message::{ButtplugMessage, ButtplugMessageFinalizer, ButtplugMessageValidator}, 16}; 17use getset::Getters; 18use serde::{Deserialize, Serialize}; 19 20#[derive( 21 Default, Clone, Debug, PartialEq, Eq, ButtplugMessage, Getters, Serialize, Deserialize, 22)] 23pub struct DeviceListV1 { 24 #[serde(rename = "Id")] 25 pub(in crate::message) id: u32, 26 #[serde(rename = "Devices")] 27 #[getset(get = "pub")] 28 pub(in crate::message) devices: Vec<DeviceMessageInfoV1>, 29} 30 31impl From<DeviceListV1> for DeviceListV0 { 32 fn from(msg: DeviceListV1) -> Self { 33 let mut devices = vec![]; 34 for d in msg.devices() { 35 let dmiv1 = d.clone(); 36 devices.push(DeviceMessageInfoV0::from(dmiv1)); 37 } 38 Self { 39 id: msg.id(), 40 devices, 41 } 42 } 43} 44 45impl From<DeviceListV2> for DeviceListV1 { 46 fn from(msg: DeviceListV2) -> Self { 47 let mut devices = vec![]; 48 for d in msg.devices() { 49 let dmiv2 = d.clone(); 50 devices.push(DeviceMessageInfoV1::from(dmiv2)); 51 } 52 Self { 53 id: msg.id(), 54 devices, 55 } 56 } 57} 58 59impl ButtplugMessageValidator for DeviceListV1 { 60 fn is_valid(&self) -> Result<(), ButtplugMessageError> { 61 self.is_not_system_id(self.id) 62 } 63} 64 65impl ButtplugMessageFinalizer for DeviceListV1 { 66}