shared/settings/
activity.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 AppSettingsActivity {
11 pub admin_log_retention_days: u16,
12 pub user_log_retention_days: u16,
13 pub server_log_retention_days: u16,
14
15 pub server_log_admin_activity: bool,
16 pub server_log_schedule_activity: bool,
17}
18
19#[async_trait::async_trait]
20impl SettingsSerializeExt for AppSettingsActivity {
21 async fn serialize(
22 &self,
23 serializer: SettingsSerializer,
24 ) -> Result<SettingsSerializer, anyhow::Error> {
25 Ok(serializer
26 .write_raw_setting(
27 "admin_log_retention_days",
28 self.admin_log_retention_days.to_compact_string(),
29 )
30 .write_raw_setting(
31 "user_log_retention_days",
32 self.user_log_retention_days.to_compact_string(),
33 )
34 .write_raw_setting(
35 "server_log_retention_days",
36 self.server_log_retention_days.to_compact_string(),
37 )
38 .write_raw_setting(
39 "server_log_admin_activity",
40 self.server_log_admin_activity.to_compact_string(),
41 )
42 .write_raw_setting(
43 "server_log_schedule_activity",
44 self.server_log_schedule_activity.to_compact_string(),
45 ))
46 }
47}
48
49pub struct AppSettingsActivityDeserializer;
50
51#[async_trait::async_trait]
52impl SettingsDeserializeExt for AppSettingsActivityDeserializer {
53 async fn deserialize_boxed(
54 &self,
55 mut deserializer: SettingsDeserializer<'_>,
56 ) -> Result<ExtensionSettings, anyhow::Error> {
57 Ok(Box::new(AppSettingsActivity {
58 admin_log_retention_days: deserializer
59 .take_raw_setting("admin_log_retention_days")
60 .and_then(|s| s.parse().ok())
61 .unwrap_or(180),
62 user_log_retention_days: deserializer
63 .take_raw_setting("user_log_retention_days")
64 .and_then(|s| s.parse().ok())
65 .unwrap_or(180),
66 server_log_retention_days: deserializer
67 .take_raw_setting("server_log_retention_days")
68 .and_then(|s| s.parse().ok())
69 .unwrap_or(90),
70 server_log_admin_activity: deserializer
71 .take_raw_setting("server_log_admin_activity")
72 .map(|s| s == "true")
73 .unwrap_or(true),
74 server_log_schedule_activity: deserializer
75 .take_raw_setting("server_log_schedule_activity")
76 .map(|s| s == "true")
77 .unwrap_or(true),
78 }))
79 }
80}