]> Untitled Git - lemmy.git/blob - crates/apub/src/extensions/group_extension.rs
Merge pull request #1674 from LemmyNet/crates-io
[lemmy.git] / crates / apub / src / extensions / group_extension.rs
1 use activitystreams::unparsed::UnparsedMutExt;
2 use activitystreams_ext::UnparsedExtension;
3 use lemmy_utils::LemmyError;
4 use serde::{Deserialize, Serialize};
5 use url::Url;
6
7 /// Activitystreams extension to allow (de)serializing additional Community field
8 /// `sensitive` (called 'nsfw' in Lemmy).
9 #[derive(Clone, Debug, Default, Deserialize, Serialize)]
10 #[serde(rename_all = "camelCase")]
11 pub struct GroupExtension {
12   pub sensitive: Option<bool>,
13   pub moderators: Option<Url>,
14 }
15
16 impl GroupExtension {
17   pub fn new(sensitive: bool, moderators_url: Url) -> Result<GroupExtension, LemmyError> {
18     Ok(GroupExtension {
19       sensitive: Some(sensitive),
20       moderators: Some(moderators_url),
21     })
22   }
23 }
24
25 impl<U> UnparsedExtension<U> for GroupExtension
26 where
27   U: UnparsedMutExt,
28 {
29   type Error = serde_json::Error;
30
31   fn try_from_unparsed(unparsed_mut: &mut U) -> Result<Self, Self::Error> {
32     Ok(GroupExtension {
33       sensitive: unparsed_mut.remove("sensitive")?,
34       moderators: unparsed_mut.remove("moderators")?,
35     })
36   }
37
38   fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
39     unparsed_mut.insert("sensitive", self.sensitive)?;
40     unparsed_mut.insert("moderators", self.moderators)?;
41     Ok(())
42   }
43 }