Skip to main content

flowsurface_data/config/
sidebar.rs

1use serde::{Deserialize, Deserializer, Serialize};
2
3use crate::tickers_table;
4
5#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
6#[serde(default)]
7pub struct Sidebar {
8    pub position: Position,
9    #[serde(skip)]
10    pub active_menu: Option<Menu>,
11    #[serde(default)]
12    pub tickers_table: Option<tickers_table::Settings>,
13}
14
15impl Sidebar {
16    pub fn set_menu(&mut self, new_menu: Menu) {
17        self.active_menu = Some(new_menu);
18    }
19
20    pub fn set_position(&mut self, position: Position) {
21        self.position = position;
22    }
23
24    pub fn is_menu_active(&self, menu: Menu) -> bool {
25        self.active_menu == Some(menu)
26    }
27
28    pub fn sync_tickers_table_settings(&mut self, settings: &tickers_table::Settings) {
29        self.tickers_table = Some(settings.clone());
30    }
31}
32
33impl Default for Sidebar {
34    fn default() -> Self {
35        Sidebar {
36            position: Position::Left,
37            active_menu: None,
38            tickers_table: None,
39        }
40    }
41}
42
43pub fn deserialize_sidebar_fallback<'de, D>(deserializer: D) -> Result<Sidebar, D::Error>
44where
45    D: Deserializer<'de>,
46{
47    Sidebar::deserialize(deserializer).or(Ok(Sidebar::default()))
48}
49
50#[derive(Default, Debug, Clone, PartialEq, Copy, Deserialize, Serialize)]
51pub enum Position {
52    #[default]
53    Left,
54    Right,
55}
56
57impl std::fmt::Display for Position {
58    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59        match self {
60            Position::Left => write!(f, "Left"),
61            Position::Right => write!(f, "Right"),
62        }
63    }
64}
65
66#[derive(Debug, Copy, Clone, PartialEq, Deserialize, Serialize)]
67pub enum Menu {
68    Layout,
69    Settings,
70    Audio,
71    ThemeEditor,
72    Network,
73}