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 buttplug_core::{
9 errors::ButtplugMessageError,
10 message::{
11 ButtplugDeviceMessage,
12 ButtplugMessage,
13 ButtplugMessageFinalizer,
14 ButtplugMessageValidator,
15 },
16};
17use getset::CopyGetters;
18use serde::{Deserialize, Serialize};
19
20/// Battery level response
21#[derive(
22 Debug,
23 ButtplugDeviceMessage,
24 ButtplugMessageFinalizer,
25 PartialEq,
26 Clone,
27 CopyGetters,
28 Serialize,
29 Deserialize,
30)]
31pub struct BatteryLevelReadingV2 {
32 #[serde(rename = "Id")]
33 id: u32,
34 #[serde(rename = "DeviceIndex")]
35 device_index: u32,
36 #[serde(rename = "BatteryLevel")]
37 #[getset(get_copy = "pub")]
38 battery_level: f64,
39}
40
41impl BatteryLevelReadingV2 {
42 pub fn new(device_index: u32, battery_level: f64) -> Self {
43 Self {
44 id: 1,
45 device_index,
46 battery_level,
47 }
48 }
49}
50
51impl ButtplugMessageValidator for BatteryLevelReadingV2 {
52 fn is_valid(&self) -> Result<(), ButtplugMessageError> {
53 self.is_not_system_id(self.id)?;
54 self.is_in_command_range(
55 self.battery_level,
56 "BatteryLevelReading must be between 0.0 and 1.0".to_string(),
57 )
58 }
59}