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};
8 #[derive(Clone, Debug, Default, Deserialize, Serialize)]
9 #[serde(rename_all = "camelCase")]
10 pub struct GroupExtension {
11 pub category: GroupCategory,
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,
28 ) -> Result<GroupExtension, LemmyError> {
29 let category = Category::read(conn, category_id)?;
30 let group_category = GroupCategory {
31 identifier: category_id.to_string(),
35 category: group_category,
41 impl<U> UnparsedExtension<U> for GroupExtension
45 type Error = serde_json::Error;
47 fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
49 category: unparsed_mut.remove("category")?,
50 sensitive: unparsed_mut.remove("sensitive")?,
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)?;