Buttplug sex toy control library
at dev 70 lines 1.9 kB view raw
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}