Buttplug sex toy control library
at master 74 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 buttplug_core::{ 9 errors::ButtplugMessageError, 10 message::{ 11 ButtplugDeviceMessage, 12 ButtplugMessage, 13 ButtplugMessageFinalizer, 14 ButtplugMessageValidator, 15 }, 16}; 17use getset::{CopyGetters, Getters}; 18use serde::{Deserialize, Serialize}; 19 20#[derive(Debug, Default, PartialEq, Clone, CopyGetters, Serialize, Deserialize)] 21#[getset(get_copy = "pub")] 22pub struct VibrateSubcommandV1 { 23 #[serde(rename = "Index")] 24 index: u32, 25 #[serde(rename = "Speed")] 26 speed: f64, 27} 28 29impl VibrateSubcommandV1 { 30 pub fn new(index: u32, speed: f64) -> Self { 31 Self { index, speed } 32 } 33} 34 35#[derive( 36 Debug, 37 Default, 38 ButtplugDeviceMessage, 39 ButtplugMessageFinalizer, 40 PartialEq, 41 Clone, 42 Getters, 43 Serialize, 44 Deserialize, 45)] 46pub struct VibrateCmdV1 { 47 #[serde(rename = "Id")] 48 id: u32, 49 #[serde(rename = "DeviceIndex")] 50 device_index: u32, 51 #[serde(rename = "Speeds")] 52 #[getset(get = "pub")] 53 speeds: Vec<VibrateSubcommandV1>, 54} 55 56impl VibrateCmdV1 { 57 pub fn new(device_index: u32, speeds: Vec<VibrateSubcommandV1>) -> Self { 58 Self { 59 id: 1, 60 device_index, 61 speeds, 62 } 63 } 64} 65 66impl ButtplugMessageValidator for VibrateCmdV1 { 67 fn is_valid(&self) -> Result<(), ButtplugMessageError> { 68 self.is_not_system_id(self.id)?; 69 for speed in &self.speeds { 70 self.is_in_command_range(speed.speed, format!("Speed {} for VibrateCmd index {} is invalid. Speed should be a value between 0.0 and 1.0", speed.speed, speed.index))?; 71 } 72 Ok(()) 73 } 74}