From 1322d1714878eda8bd0307a44ddb776ac740883e Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Sun, 7 Sep 2025 05:25:06 +0100 Subject: [PATCH] Slightly reworked serialized panel's format. --- panels/multiple.toml | 3 ++- panels/quarter.toml | 3 ++- zsw/src/panel/panels.rs | 25 +++++++++---------------- zsw/src/panel/ser.rs | 30 +++++++++++++++++++----------- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/panels/multiple.toml b/panels/multiple.toml index 5a92612..05e6d9e 100644 --- a/panels/multiple.toml +++ b/panels/multiple.toml @@ -9,5 +9,6 @@ duration = 5.0 fade_duration = 1.0 [shader] -type = "fade-out" +type = "fade" +fade = "out" strength = 1.0 diff --git a/panels/quarter.toml b/panels/quarter.toml index ea33274..7b6a241 100644 --- a/panels/quarter.toml +++ b/panels/quarter.toml @@ -6,5 +6,6 @@ duration = 5.0 fade_duration = 1.0 [shader] -type = "fade-white" +type = "fade" +fade = "white" strength = 1.0 diff --git a/zsw/src/panel/panels.rs b/zsw/src/panel/panels.rs index 91e2b1f..a7daebc 100644 --- a/zsw/src/panel/panels.rs +++ b/zsw/src/panel/panels.rs @@ -63,27 +63,20 @@ impl Panels { // Finally convert it let geometries = panel.geometries.into_iter().map(|geometry| geometry.geometry).collect(); // TODO: Is this a good default? - let panel_shader = panel.shader.unwrap_or(ser::PanelShader::FadeOut { strength: 1.5 }); + let panel_shader = panel + .shader + .unwrap_or(ser::PanelShader::Fade(ser::PanelShaderFade::Out { strength: 1.5 })); let state = match panel_shader { ser::PanelShader::None { background_color } => PanelState::None(PanelNoneState::new(background_color)), - ser::PanelShader::Fade | - ser::PanelShader::FadeWhite { .. } | - ser::PanelShader::FadeOut { .. } | - ser::PanelShader::FadeIn { .. } => PanelState::Fade(PanelFadeState::new( + ser::PanelShader::Fade(fade) => PanelState::Fade(PanelFadeState::new( panel.state.duration, panel.state.fade_duration, - #[expect( - clippy::match_wildcard_for_single_variants, - reason = "We only care about the variants above" - )] - match panel_shader { - ser::PanelShader::Fade => PanelShaderFade::Basic, - ser::PanelShader::FadeWhite { strength } => PanelShaderFade::White { strength }, - ser::PanelShader::FadeOut { strength } => PanelShaderFade::Out { strength }, - ser::PanelShader::FadeIn { strength } => PanelShaderFade::In { strength }, - - _ => unreachable!(), + match fade { + ser::PanelShaderFade::Basic => PanelShaderFade::Basic, + ser::PanelShaderFade::White { strength } => PanelShaderFade::White { strength }, + ser::PanelShaderFade::Out { strength } => PanelShaderFade::Out { strength }, + ser::PanelShaderFade::In { strength } => PanelShaderFade::In { strength }, }, )), }; diff --git a/zsw/src/panel/ser.rs b/zsw/src/panel/ser.rs index b2c3bc2..d8a5fed 100644 --- a/zsw/src/panel/ser.rs +++ b/zsw/src/panel/ser.rs @@ -46,7 +46,6 @@ pub struct PanelState { #[derive(Debug)] #[derive(serde::Serialize, serde::Deserialize)] #[serde(tag = "type")] -#[expect(variant_size_differences, reason = "16 bytes is still reasonable for this type")] pub enum PanelShader { #[serde(rename = "none")] None { @@ -55,14 +54,23 @@ pub enum PanelShader { }, #[serde(rename = "fade")] - Fade, - - #[serde(rename = "fade-white")] - FadeWhite { strength: f32 }, - - #[serde(rename = "fade-out")] - FadeOut { strength: f32 }, - - #[serde(rename = "fade-in")] - FadeIn { strength: f32 }, + Fade(PanelShaderFade), +} + +/// Configuration shader fade +#[derive(Debug)] +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(tag = "fade")] +pub enum PanelShaderFade { + #[serde(rename = "basic")] + Basic, + + #[serde(rename = "white")] + White { strength: f32 }, + + #[serde(rename = "out")] + Out { strength: f32 }, + + #[serde(rename = "in")] + In { strength: f32 }, }