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