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 ButtplugMessage,
12 ButtplugMessageFinalizer,
13 ButtplugMessageSpecVersion,
14 ButtplugMessageValidator,
15 ServerInfoV4,
16 },
17};
18use getset::{CopyGetters, Getters};
19use serde::{Deserialize, Serialize};
20
21#[derive(
22 Debug,
23 ButtplugMessage,
24 ButtplugMessageFinalizer,
25 PartialEq,
26 Eq,
27 Clone,
28 Getters,
29 CopyGetters,
30 Serialize,
31 Deserialize,
32)]
33pub struct ServerInfoV2 {
34 #[serde(rename = "Id")]
35 id: u32,
36 #[serde(rename = "MessageVersion")]
37 #[getset(get_copy = "pub")]
38 message_version: ButtplugMessageSpecVersion,
39 #[serde(rename = "MaxPingTime")]
40 #[getset(get_copy = "pub")]
41 max_ping_time: u32,
42 #[serde(rename = "ServerName")]
43 #[getset(get = "pub")]
44 server_name: String,
45}
46
47impl ServerInfoV2 {
48 pub fn new(
49 server_name: &str,
50 message_version: ButtplugMessageSpecVersion,
51 max_ping_time: u32,
52 ) -> Self {
53 Self {
54 id: 1,
55 message_version,
56 max_ping_time,
57 server_name: server_name.to_string(),
58 }
59 }
60}
61
62impl ButtplugMessageValidator for ServerInfoV2 {
63 fn is_valid(&self) -> Result<(), ButtplugMessageError> {
64 self.is_not_system_id(self.id)
65 }
66}
67
68impl From<ServerInfoV4> for ServerInfoV2 {
69 fn from(value: ServerInfoV4) -> Self {
70 Self {
71 id: value.id(),
72 server_name: value.server_name().clone(),
73 message_version: value.protocol_version_major(),
74 max_ping_time: value.max_ping_time(),
75 }
76 }
77}