use crate::message::{
ButtplugDeviceMessage,
ButtplugMessage,
ButtplugMessageError,
ButtplugMessageValidator,
InputType,
};
use getset::CopyGetters;
use serde::{Deserialize, Serialize};
#[derive(Debug, Display, PartialEq, Eq, Clone, Serialize, Deserialize, Hash, Copy)]
pub enum InputCommandType {
#[serde(alias = "read")]
Read,
#[serde(alias = "subscribe")]
Subscribe,
#[serde(alias = "unsubscribe")]
Unsubscribe,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, CopyGetters, Serialize, Deserialize)]
pub struct InputCmdV4 {
#[serde(rename = "Id")]
id: u32,
#[serde(rename = "DeviceIndex")]
device_index: u32,
#[getset(get_copy = "pub")]
#[serde(rename = "FeatureIndex")]
feature_index: u32,
#[getset(get_copy = "pub")]
#[serde(rename = "Type")]
input_type: InputType,
#[getset(get_copy = "pub")]
#[serde(rename = "Command")]
input_command: InputCommandType,
}
impl InputCmdV4 {
pub fn new(
device_index: u32,
feature_index: u32,
input_type: InputType,
input_command_type: InputCommandType,
) -> Self {
Self {
id: 1,
device_index,
feature_index,
input_type,
input_command: input_command_type,
}
}
}
impl ButtplugMessage for InputCmdV4 {
fn id(&self) -> u32 {
self.id
}
fn set_id(&mut self, id: u32) {
self.id = id;
}
}
impl ButtplugDeviceMessage for InputCmdV4 {
fn device_index(&self) -> u32 {
self.device_index
}
fn set_device_index(&mut self, device_index: u32) {
self.device_index = device_index;
}
}
impl ButtplugMessageValidator for InputCmdV4 {
fn is_valid(&self) -> Result<(), ButtplugMessageError> {
self.is_not_system_id(self.id)
}
}