revolt_database/models/user_settings/ops/
reference.rs1use revolt_result::Result;
2
3use crate::ReferenceDb;
4use crate::UserSettings;
5
6use super::AbstractUserSettings;
7
8#[async_trait]
9impl AbstractUserSettings for ReferenceDb {
10 async fn fetch_user_settings(&'_ self, id: &str, filter: &'_ [String]) -> Result<UserSettings> {
12 let user_settings = self.user_settings.lock().await;
13 user_settings
14 .get(id)
15 .cloned()
16 .map(|settings| {
17 settings
18 .into_iter()
19 .filter(|(key, _)| filter.contains(key))
20 .collect()
21 })
22 .ok_or_else(|| create_error!(NotFound))
23 }
24
25 async fn set_user_settings(&self, id: &str, settings: &UserSettings) -> Result<()> {
27 let mut user_settings = self.user_settings.lock().await;
28 if let Some(settings) = user_settings.get_mut(id) {
29 settings.extend(settings.clone());
30 } else {
31 user_settings.insert(id.to_string(), settings.clone());
32 }
33
34 Ok(())
35 }
36
37 async fn delete_user_settings(&self, id: &str) -> Result<()> {
39 let mut user_settings = self.user_settings.lock().await;
40 if user_settings.remove(id).is_some() {
41 Ok(())
42 } else {
43 Err(create_error!(NotFound))
44 }
45 }
46}