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 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}