shared/settings/
server.rs1use super::{
2 ExtensionSettings, SettingsDeserializeExt, SettingsDeserializer, SettingsSerializeExt,
3 SettingsSerializer,
4};
5use compact_str::ToCompactString;
6use serde::{Deserialize, Serialize};
7use utoipa::ToSchema;
8
9#[derive(Clone, ToSchema, Serialize, Deserialize)]
10pub struct AppSettingsServer {
11 pub max_file_manager_view_size: u64,
12 pub max_file_manager_content_search_size: u64,
13 pub max_file_manager_search_results: u64,
14 pub max_schedules_step_count: u64,
15
16 pub allow_overwriting_custom_docker_image: bool,
17 pub allow_editing_startup_command: bool,
18 pub allow_viewing_installation_logs: bool,
19 pub allow_acknowledging_installation_failure: bool,
20 pub allow_viewing_transfer_progress: bool,
21}
22
23#[async_trait::async_trait]
24impl SettingsSerializeExt for AppSettingsServer {
25 async fn serialize(
26 &self,
27 serializer: SettingsSerializer,
28 ) -> Result<SettingsSerializer, anyhow::Error> {
29 Ok(serializer
30 .write_raw_setting(
31 "max_file_manager_view_size",
32 self.max_file_manager_view_size.to_compact_string(),
33 )
34 .write_raw_setting(
35 "max_file_manager_content_search_size",
36 self.max_file_manager_content_search_size
37 .to_compact_string(),
38 )
39 .write_raw_setting(
40 "max_file_manager_search_results",
41 self.max_file_manager_search_results.to_compact_string(),
42 )
43 .write_raw_setting(
44 "max_schedules_step_count",
45 self.max_schedules_step_count.to_compact_string(),
46 )
47 .write_raw_setting(
48 "allow_overwriting_custom_docker_image",
49 self.allow_overwriting_custom_docker_image
50 .to_compact_string(),
51 )
52 .write_raw_setting(
53 "allow_editing_startup_command",
54 self.allow_editing_startup_command.to_compact_string(),
55 )
56 .write_raw_setting(
57 "allow_viewing_installation_logs",
58 self.allow_viewing_installation_logs.to_compact_string(),
59 )
60 .write_raw_setting(
61 "allow_acknowledging_installation_failure",
62 self.allow_acknowledging_installation_failure
63 .to_compact_string(),
64 )
65 .write_raw_setting(
66 "allow_viewing_transfer_progress",
67 self.allow_viewing_transfer_progress.to_compact_string(),
68 ))
69 }
70}
71
72pub struct AppSettingsServerDeserializer;
73
74#[async_trait::async_trait]
75impl SettingsDeserializeExt for AppSettingsServerDeserializer {
76 async fn deserialize_boxed(
77 &self,
78 mut deserializer: SettingsDeserializer<'_>,
79 ) -> Result<ExtensionSettings, anyhow::Error> {
80 Ok(Box::new(AppSettingsServer {
81 max_file_manager_view_size: deserializer
82 .take_raw_setting("max_file_manager_view_size")
83 .and_then(|s| s.parse().ok())
84 .unwrap_or(10 * 1024 * 1024),
85 max_file_manager_content_search_size: deserializer
86 .take_raw_setting("max_file_manager_content_search_size")
87 .and_then(|s| s.parse().ok())
88 .unwrap_or(5 * 1024 * 1024),
89 max_file_manager_search_results: deserializer
90 .take_raw_setting("max_file_manager_search_results")
91 .and_then(|s| s.parse().ok())
92 .unwrap_or(100),
93 max_schedules_step_count: deserializer
94 .take_raw_setting("max_schedules_step_count")
95 .and_then(|s| s.parse().ok())
96 .unwrap_or(100),
97 allow_overwriting_custom_docker_image: deserializer
98 .take_raw_setting("allow_overwriting_custom_docker_image")
99 .map(|s| s == "true")
100 .unwrap_or(true),
101 allow_editing_startup_command: deserializer
102 .take_raw_setting("allow_editing_startup_command")
103 .map(|s| s == "true")
104 .unwrap_or(false),
105 allow_viewing_installation_logs: deserializer
106 .take_raw_setting("allow_viewing_installation_logs")
107 .map(|s| s == "true")
108 .unwrap_or(true),
109 allow_acknowledging_installation_failure: deserializer
110 .take_raw_setting("allow_acknowledging_installation_failure")
111 .map(|s| s == "true")
112 .unwrap_or(true),
113 allow_viewing_transfer_progress: deserializer
114 .take_raw_setting("allow_viewing_transfer_progress")
115 .map(|s| s == "true")
116 .unwrap_or(true),
117 }))
118 }
119}