]> Untitled Git - lemmy.git/blob - crates/apub/src/objects/mod.rs
Major refactor, adding newtypes for apub crate
[lemmy.git] / crates / apub / src / objects / mod.rs
1 use activitystreams::{
2   base::BaseExt,
3   object::{kind::ImageType, Tombstone, TombstoneExt},
4 };
5 use anyhow::anyhow;
6 use chrono::NaiveDateTime;
7 use lemmy_apub_lib::values::MediaTypeMarkdown;
8 use lemmy_utils::{utils::convert_datetime, LemmyError};
9 use url::Url;
10
11 pub mod comment;
12 pub mod community;
13 pub mod person;
14 pub mod post;
15 pub mod private_message;
16
17 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
18 #[serde(rename_all = "camelCase")]
19 pub struct Source {
20   content: String,
21   media_type: MediaTypeMarkdown,
22 }
23
24 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
25 #[serde(rename_all = "camelCase")]
26 pub struct ImageObject {
27   #[serde(rename = "type")]
28   kind: ImageType,
29   url: Url,
30 }
31
32 /// Updated is actually the deletion time
33 fn create_tombstone<T>(
34   deleted: bool,
35   object_id: Url,
36   updated: Option<NaiveDateTime>,
37   former_type: T,
38 ) -> Result<Tombstone, LemmyError>
39 where
40   T: ToString,
41 {
42   if deleted {
43     if let Some(updated) = updated {
44       let mut tombstone = Tombstone::new();
45       tombstone.set_id(object_id);
46       tombstone.set_former_type(former_type.to_string());
47       tombstone.set_deleted(convert_datetime(updated));
48       Ok(tombstone)
49     } else {
50       Err(anyhow!("Cant convert to tombstone because updated time was None.").into())
51     }
52   } else {
53     Err(anyhow!("Cant convert object to tombstone if it wasnt deleted").into())
54   }
55 }