From e9a96162ac8db6acddcc2caa432cf4f4b349854e Mon Sep 17 00:00:00 2001 From: Eval Exec Date: Thu, 8 Oct 2026 00:14:24 +0800 Subject: [PATCH] refactor(protocol): derive transition effect inventory --- .../src/scroll_animation.rs | 38 +++++++------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/crates/neomacs-display-protocol/src/scroll_animation.rs b/crates/neomacs-display-protocol/src/scroll_animation.rs index b737a5205e..026f93923b 100644 --- a/crates/neomacs-display-protocol/src/scroll_animation.rs +++ b/crates/neomacs-display-protocol/src/scroll_animation.rs @@ -32,7 +32,7 @@ use strum::{EnumString, IntoStaticStr}; #[strum(serialize_all = "kebab-case")] #[derive(serde::Serialize, serde::Deserialize)] #[serde(rename_all = "kebab-case")] -#[derive(strum::VariantNames)] +#[derive(strum::VariantNames, strum::EnumCount, strum::VariantArray)] pub enum TransitionEffect { // ── Transition effects (2D, vertex position/alpha changes) ────────── /// Default: old content slides out, new content slides in. @@ -168,32 +168,20 @@ pub enum TransitionEffect { impl TransitionEffect { /// Number of defined scroll effects. - pub const COUNT: usize = 21; + pub const COUNT: usize = ::COUNT; /// All effects in definition order. - pub const ALL: [TransitionEffect; Self::COUNT] = [ - Self::Slide, - Self::Crossfade, - Self::ScaleZoom, - Self::FadeEdges, - Self::Cascade, - Self::Parallax, - Self::Tilt, - Self::PageCurl, - Self::CardFlip, - Self::CylinderRoll, - Self::Wobbly, - Self::Wave, - Self::PerLineSpring, - Self::Liquid, - Self::MotionBlur, - Self::ChromaticAberration, - Self::GhostTrails, - Self::ColorTemperature, - Self::CRTScanlines, - Self::DepthOfField, - Self::TypewriterReveal, - ]; + pub const ALL: [TransitionEffect; Self::COUNT] = { + // Preserve the public fixed-size array while deriving its contents. + let variants = ::VARIANTS; + let mut all = [Self::Slide; Self::COUNT]; + let mut index = 0; + while index < Self::COUNT { + all[index] = variants[index]; + index += 1; + } + all + }; /// Parse from string (for Lisp integration). // Inherent infallible parser that defaults on an unknown name; deliberately