]> Untitled Git - lemmy.git/blob - crates/apub/src/extensions/group_extensions.rs
Merge pull request #1328 from LemmyNet/move_views_to_diesel
[lemmy.git] / crates / apub / src / extensions / group_extensions.rs
1 use activitystreams::unparsed::UnparsedMutExt;
2 use activitystreams_ext::UnparsedExtension;
3 use diesel::PgConnection;
4 use lemmy_db_queries::Crud;
5 use lemmy_db_schema::source::category::Category;
6 use lemmy_utils::LemmyError;
7 use serde::{Deserialize, Serialize};
8
9 /// Activitystreams extension to allow (de)serializing additional Community fields `category` and
10 /// `sensitive` (called 'nsfw' in Lemmy).
11 #[derive(Clone, Debug, Default, Deserialize, Serialize)]
12 #[serde(rename_all = "camelCase")]
13 pub struct GroupExtension {
14   pub category: GroupCategory,
15   pub sensitive: bool,
16 }
17
18 #[derive(Clone, Debug, Default, Deserialize, Serialize)]
19 #[serde(rename_all = "camelCase")]
20 pub struct GroupCategory {
21   // Using a string because that's how Peertube does it.
22   pub identifier: String,
23   pub name: String,
24 }
25
26 impl GroupExtension {
27   pub fn new(
28     conn: &PgConnection,
29     category_id: i32,
30     sensitive: bool,
31   ) -> Result<GroupExtension, LemmyError> {
32     let category = Category::read(conn, category_id)?;
33     let group_category = GroupCategory {
34       identifier: category_id.to_string(),
35       name: category.name,
36     };
37     Ok(GroupExtension {
38       category: group_category,
39       sensitive,
40     })
41   }
42 }
43
44 impl<U> UnparsedExtension<U> for GroupExtension
45 where
46   U: UnparsedMutExt,
47 {
48   type Error = serde_json::Error;
49
50   fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
51     Ok(GroupExtension {
52       category: unparsed_mut.remove("category")?,
53       sensitive: unparsed_mut.remove("sensitive")?,
54     })
55   }
56
57   fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
58     unparsed_mut.insert("category", self.category)?;
59     unparsed_mut.insert("sensitive", self.sensitive)?;
60     Ok(())
61   }
62 }