shared/settings/
server.rs

1use 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}