Buttplug sex toy control library
1use dashmap::DashMap;
2use getset::{Getters, MutGetters, Setters};
3use serde::{Deserialize, Serialize};
4
5use crate::UserDeviceIdentifier;
6
7use super::{
8 ConfigVersion,
9 ConfigVersionGetter,
10 device::ConfigUserDeviceDefinition,
11 get_internal_config_version,
12 protocol::ProtocolDefinition,
13};
14
15#[derive(Deserialize, Serialize, Debug, Clone, Getters, Setters, MutGetters)]
16#[getset(get = "pub", set = "pub", get_mut = "pub(crate)")]
17pub struct UserDeviceConfigPair {
18 pub identifier: UserDeviceIdentifier,
19 pub config: ConfigUserDeviceDefinition,
20}
21
22#[derive(Deserialize, Serialize, Debug, Clone, Default, Getters, Setters, MutGetters)]
23#[getset(get = "pub", set = "pub", get_mut = "pub")]
24pub struct UserConfigDefinition {
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub protocols: Option<DashMap<String, ProtocolDefinition>>,
27 #[serde(rename = "devices", default, skip_serializing_if = "Option::is_none")]
28 pub user_device_configs: Option<Vec<UserDeviceConfigPair>>,
29}
30
31#[derive(Deserialize, Serialize, Debug, Getters, Setters)]
32#[getset(get = "pub", get_mut = "pub", set = "pub")]
33pub struct UserConfigFile {
34 version: ConfigVersion,
35 #[serde(default)]
36 user_configs: Option<UserConfigDefinition>,
37}
38
39impl Default for UserConfigFile {
40 fn default() -> Self {
41 Self {
42 version: get_internal_config_version(),
43 user_configs: Some(UserConfigDefinition::default()),
44 }
45 }
46}
47
48impl ConfigVersionGetter for UserConfigFile {
49 fn version(&self) -> ConfigVersion {
50 self.version
51 }
52}
53
54impl UserConfigFile {
55 pub fn new(major_version: u32, minor_version: u32) -> Self {
56 Self {
57 version: ConfigVersion {
58 major: major_version,
59 minor: minor_version,
60 },
61 user_configs: None,
62 }
63 }
64
65 #[allow(dead_code)]
66 pub fn to_json(&self) -> String {
67 serde_json::to_string(self)
68 .expect("All types below this are Serialize, so this should be infallible.")
69 }
70}