flowsurface_data/config/
sidebar.rs1use 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}