Skip to main content

flowsurface_data/config/
state.rs

1use super::ScaleFactor;
2use super::sidebar::Sidebar;
3use super::timezone::UserTimezone;
4use crate::config::network::Network;
5use crate::layout::WindowSpec;
6use crate::{AudioStream, Layout, Theme};
7
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Serialize, Deserialize, Default)]
11pub struct Layouts {
12    pub layouts: Vec<Layout>,
13    pub active_layout: Option<String>,
14}
15
16#[derive(Default, Clone, Deserialize, Serialize)]
17#[serde(default)]
18pub struct State {
19    pub layout_manager: Layouts,
20    pub selected_theme: Theme,
21    pub custom_theme: Option<Theme>,
22    pub main_window: Option<WindowSpec>,
23    pub timezone: UserTimezone,
24    pub sidebar: Sidebar,
25    pub scale_factor: ScaleFactor,
26    pub audio_cfg: AudioStream,
27    pub network: Network,
28    pub size_in_quote_ccy: exchange::SizeUnit,
29    pub cache_market_metadata: bool,
30}
31
32impl State {
33    pub fn from_parts(
34        layout_manager: Layouts,
35        selected_theme: Theme,
36        custom_theme: Option<Theme>,
37        main_window: Option<WindowSpec>,
38        timezone: UserTimezone,
39        sidebar: Sidebar,
40        scale_factor: ScaleFactor,
41        audio_cfg: AudioStream,
42        network: Network,
43        volume_size_unit: exchange::SizeUnit,
44        cache_market_metadata: bool,
45    ) -> Self {
46        State {
47            layout_manager,
48            selected_theme: Theme(selected_theme.0),
49            custom_theme: custom_theme.map(|t| Theme(t.0)),
50            main_window,
51            timezone,
52            sidebar,
53            scale_factor,
54            audio_cfg,
55            network,
56            size_in_quote_ccy: volume_size_unit,
57            cache_market_metadata,
58        }
59    }
60}