Buttplug sex toy control library
at master 65 lines 2.5 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 getset::{Getters, Setters}; 9use serde::{Deserialize, Serialize}; 10 11use crate::message::{v2::ClientDeviceMessageAttributesV2, v3::ClientDeviceMessageAttributesV3}; 12use buttplug_core::message::DeviceFeature; 13 14#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] 15pub struct NullDeviceMessageAttributesV1 {} 16 17#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Getters, Setters)] 18pub struct ClientDeviceMessageAttributesV1 { 19 // Generic commands 20 #[getset(get = "pub")] 21 #[serde(rename = "VibrateCmd")] 22 #[serde(skip_serializing_if = "Option::is_none")] 23 pub(in crate::message) vibrate_cmd: Option<GenericDeviceMessageAttributesV1>, 24 #[getset(get = "pub")] 25 #[serde(rename = "RotateCmd")] 26 #[serde(skip_serializing_if = "Option::is_none")] 27 pub(in crate::message) rotate_cmd: Option<GenericDeviceMessageAttributesV1>, 28 #[getset(get = "pub")] 29 #[serde(rename = "LinearCmd")] 30 #[serde(skip_serializing_if = "Option::is_none")] 31 pub(in crate::message) linear_cmd: Option<GenericDeviceMessageAttributesV1>, 32 33 // StopDeviceCmd always exists 34 #[getset(get = "pub")] 35 pub(in crate::message) stop_device_cmd: NullDeviceMessageAttributesV1, 36 37 // Obsolete commands are only added post-serialization 38 #[getset(get = "pub")] 39 #[serde(skip_serializing_if = "Option::is_none")] 40 pub(in crate::message) single_motor_vibrate_cmd: Option<NullDeviceMessageAttributesV1>, 41 #[getset(get = "pub")] 42 #[serde(skip_serializing_if = "Option::is_none")] 43 pub(in crate::message) fleshlight_launch_fw12_cmd: Option<NullDeviceMessageAttributesV1>, 44 #[getset(get = "pub")] 45 #[serde(skip_serializing_if = "Option::is_none")] 46 pub(in crate::message) vorze_a10_cyclone_cmd: Option<NullDeviceMessageAttributesV1>, 47} 48 49#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Getters, Setters)] 50pub struct GenericDeviceMessageAttributesV1 { 51 #[serde(rename = "FeatureCount")] 52 feature_count: u32, 53} 54 55impl GenericDeviceMessageAttributesV1 { 56 pub fn new(feature_count: u32) -> Self { 57 Self { feature_count } 58 } 59} 60 61impl From<Vec<DeviceFeature>> for ClientDeviceMessageAttributesV1 { 62 fn from(value: Vec<DeviceFeature>) -> Self { 63 ClientDeviceMessageAttributesV2::from(ClientDeviceMessageAttributesV3::from(value)).into() 64 } 65}