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::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}