Buttplug sex toy control library
at dev 2.1 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 crate::message::ServerInfoV2; 9use buttplug_core::{ 10 errors::ButtplugMessageError, 11 message::{ 12 ButtplugMessage, 13 ButtplugMessageFinalizer, 14 ButtplugMessageSpecVersion, 15 ButtplugMessageValidator, 16 }, 17}; 18 19use getset::{CopyGetters, Getters}; 20use serde::{Deserialize, Serialize}; 21 22#[derive( 23 Debug, 24 ButtplugMessage, 25 ButtplugMessageFinalizer, 26 PartialEq, 27 Eq, 28 Clone, 29 Getters, 30 CopyGetters, 31 Serialize, 32 Deserialize, 33)] 34pub struct ServerInfoV0 { 35 #[serde(rename = "Id")] 36 id: u32, 37 #[serde(rename = "MajorVersion")] 38 #[getset(get_copy = "pub")] 39 major_version: u32, 40 #[serde(rename = "MinorVersion")] 41 #[getset(get_copy = "pub")] 42 minor_version: u32, 43 #[serde(rename = "BuildVersion")] 44 #[getset(get_copy = "pub")] 45 build_version: u32, 46 #[serde(rename = "MessageVersion")] 47 #[getset(get_copy = "pub")] 48 message_version: ButtplugMessageSpecVersion, 49 #[serde(rename = "MaxPingTime")] 50 #[getset(get_copy = "pub")] 51 max_ping_time: u32, 52 #[serde(rename = "ServerName")] 53 #[getset(get = "pub")] 54 server_name: String, 55} 56 57impl ServerInfoV0 { 58 pub fn new( 59 server_name: &str, 60 message_version: ButtplugMessageSpecVersion, 61 max_ping_time: u32, 62 ) -> Self { 63 Self { 64 id: 1, 65 major_version: 0, 66 minor_version: 0, 67 build_version: 0, 68 message_version, 69 max_ping_time, 70 server_name: server_name.to_string(), 71 } 72 } 73} 74 75impl ButtplugMessageValidator for ServerInfoV0 { 76 fn is_valid(&self) -> Result<(), ButtplugMessageError> { 77 self.is_system_id(self.id) 78 } 79} 80 81impl From<ServerInfoV2> for ServerInfoV0 { 82 fn from(msg: ServerInfoV2) -> Self { 83 let mut out_msg = Self::new( 84 msg.server_name(), 85 msg.message_version(), 86 msg.max_ping_time(), 87 ); 88 out_msg.set_id(msg.id()); 89 out_msg 90 } 91}