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