use std::collections::HashMap; use std::sync::Arc; use serde::Deserialize; use deckster_shared::path::{KeyPosition, KnobPosition}; use deckster_shared::style::KeyStyle; use crate::model::geometry::UIntVec2; #[derive(Debug, Deserialize)] pub struct File { pub id: Option, pub scrolling: Option, pub keys: HashMap, } #[derive(Debug)] pub struct Page { pub id: String, pub scrolling: Option, pub keys: HashMap>, } #[derive(Debug, Deserialize)] pub struct ScrollingConfig { pub knob: Option, pub key: Option, pub delta: u8, #[serde(default)] pub axis: ScrollingConfigAxis, } #[derive(Debug, Deserialize)] pub struct ScrollingKeysConfig { pub previous: UIntVec2, pub next: UIntVec2, } #[derive(Debug, Default, Eq, PartialEq, Hash, Deserialize)] #[serde(rename_all = "kebab-case")] pub enum ScrollingConfigAxis { #[default] Vertical, Horizontal, } #[derive(Debug, Deserialize)] pub struct Key { #[serde(default, flatten)] pub base_style: KeyStyle, pub handler: String, pub config: Arc, }