shared/settings/
activity.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 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}