From f4159e782b9b6886b4adce1f9293ec5de86ee99d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Sun, 9 Feb 2025 08:13:33 +0100 Subject: [PATCH] Made config files a bit smaller by skipping defaults. --- .../file_base_scanner/bbstro_fingerprint.rs | 1 + .../src/icy_board/commands.rs | 24 ++++++++++++++++- crates/icy_board_engine/src/icy_board/mod.rs | 1 - .../src/icy_board/security_expr.rs | 26 ++++++++++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/crates/dizbase/src/file_base_scanner/bbstro_fingerprint.rs b/crates/dizbase/src/file_base_scanner/bbstro_fingerprint.rs index 4a2a4ffb..cb1aef01 100644 --- a/crates/dizbase/src/file_base_scanner/bbstro_fingerprint.rs +++ b/crates/dizbase/src/file_base_scanner/bbstro_fingerprint.rs @@ -35,6 +35,7 @@ fn is_null_64(b: impl std::borrow::Borrow) -> bool { fn is_null_32(b: impl std::borrow::Borrow) -> bool { *b.borrow() == 0 } + impl Fingerprint { pub fn new(file_name: String, crc: u32, crc_file_size: u64) -> Self { Self { diff --git a/crates/icy_board_engine/src/icy_board/commands.rs b/crates/icy_board_engine/src/icy_board/commands.rs index 1bb8a529..2ab6d103 100644 --- a/crates/icy_board_engine/src/icy_board/commands.rs +++ b/crates/icy_board_engine/src/icy_board/commands.rs @@ -4,7 +4,7 @@ use crate::Res; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde_with::{serde_as, DisplayFromStr}; -use super::{security_expr::SecurityExpression, IcyBoardSerializer, PCBoardRecordImporter}; +use super::{is_null_64, security_expr::SecurityExpression, IcyBoardSerializer, PCBoardRecordImporter}; #[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Debug, Default)] pub enum CommandType { @@ -520,6 +520,10 @@ pub struct Position { } impl Position { + pub fn is_default(&self) -> bool { + *self == Position::default() + } + pub fn parse(txt: &str) -> Self { let mut parts = txt.split(','); let x = parts.next().unwrap_or("0").trim().parse().unwrap_or(0); @@ -571,6 +575,12 @@ pub enum AutoRun { Loop, } +impl AutoRun { + pub fn is_default(&self) -> bool { + matches!(self, AutoRun::Disabled) + } +} + impl FromStr for AutoRun { type Err = String; @@ -596,6 +606,7 @@ impl AutoRun { #[derive(Serialize, Deserialize, Clone, Default, PartialEq)] pub struct Command { #[serde(default)] + #[serde(skip_serializing_if = "String::is_empty")] pub display: String, #[serde(default)] @@ -603,15 +614,18 @@ pub struct Command { pub lighbar_display: String, #[serde(default)] + #[serde(skip_serializing_if = "Position::is_default")] pub position: Position, #[serde(default)] pub keyword: String, #[serde(default)] + #[serde(skip_serializing_if = "AutoRun::is_default")] pub auto_run: AutoRun, #[serde(default)] + #[serde(skip_serializing_if = "is_null_64")] pub autorun_time: u64, #[serde(default)] @@ -635,6 +649,12 @@ pub enum ActionTrigger { Selection, } +impl ActionTrigger { + pub fn is_default(&self) -> bool { + matches!(self, ActionTrigger::Activation) + } +} + #[derive(Serialize, Clone, Deserialize, Default, PartialEq)] pub struct CommandAction { pub command_type: CommandType, @@ -643,6 +663,8 @@ pub struct CommandAction { #[serde(skip_serializing_if = "String::is_empty")] pub parameter: String, + #[serde(default)] + #[serde(skip_serializing_if = "ActionTrigger::is_default")] pub trigger: ActionTrigger, } diff --git a/crates/icy_board_engine/src/icy_board/mod.rs b/crates/icy_board_engine/src/icy_board/mod.rs index 48118613..ea1ee3b3 100644 --- a/crates/icy_board_engine/src/icy_board/mod.rs +++ b/crates/icy_board_engine/src/icy_board/mod.rs @@ -634,7 +634,6 @@ pub fn is_null_64(b: impl std::borrow::Borrow) -> bool { pub fn is_null_32(b: impl std::borrow::Borrow) -> bool { *b.borrow() == 0 } - pub fn is_null_16(b: impl std::borrow::Borrow) -> bool { *b.borrow() == 0 } diff --git a/crates/icy_board_engine/src/icy_board/security_expr.rs b/crates/icy_board_engine/src/icy_board/security_expr.rs index ab968c72..bd47492d 100644 --- a/crates/icy_board_engine/src/icy_board/security_expr.rs +++ b/crates/icy_board_engine/src/icy_board/security_expr.rs @@ -64,7 +64,7 @@ impl Display for Value { } } -#[derive(Clone, PartialEq, Serialize, Deserialize)] +#[derive(Clone, PartialEq)] pub enum SecurityExpression { UnaryExpression(UnaryOp, Box), BinaryExpression(BinaryOp, Box, Box), @@ -103,6 +103,30 @@ impl FromStr for SecurityExpression { } } +impl From for SecurityExpression { + fn from(s: String) -> Self { + SecurityExpression::from_str(&s).unwrap_or_default() + } +} + +impl<'de> Deserialize<'de> for SecurityExpression { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + String::deserialize(deserializer).map(Self::from) + } +} + +impl serde::Serialize for SecurityExpression { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.to_string().serialize(serializer) + } +} + #[derive(Logos, Debug, PartialEq)] #[logos(skip r"[ \t\n\f]+")] // Ignore this regex pattern between tokens enum Token {