]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/protocol/mod.rs
Implement instance actor (#1798)
[lemmy.git] / crates / apub / src / protocol / mod.rs
index 22df0354d07ee9d3da2c406bc320d5df444b25a2..d1532a9523ae7f4d3b606cdcf6f0c79680b20c6c 100644 (file)
@@ -1,8 +1,10 @@
-use activitystreams::object::kind::ImageType;
+use activitystreams_kinds::object::ImageType;
 use serde::{Deserialize, Serialize};
 use url::Url;
 
 use lemmy_apub_lib::values::MediaTypeMarkdown;
+use lemmy_db_schema::newtypes::DbUrl;
+use std::collections::HashMap;
 
 pub mod activities;
 pub(crate) mod collections;
@@ -15,27 +17,56 @@ pub struct Source {
   pub(crate) media_type: MediaTypeMarkdown,
 }
 
+impl Source {
+  pub(crate) fn new(content: String) -> Self {
+    Source {
+      content,
+      media_type: MediaTypeMarkdown::Markdown,
+    }
+  }
+}
+
 #[derive(Clone, Debug, Deserialize, Serialize)]
 #[serde(rename_all = "camelCase")]
 pub struct ImageObject {
   #[serde(rename = "type")]
-  pub(crate) kind: ImageType,
+  kind: ImageType,
   pub(crate) url: Url,
 }
 
+impl ImageObject {
+  pub(crate) fn new(url: DbUrl) -> Self {
+    ImageObject {
+      kind: ImageType::Image,
+      url: url.into(),
+    }
+  }
+}
+
+#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize)]
+#[serde(transparent)]
+pub struct Unparsed(HashMap<String, serde_json::Value>);
+
 #[cfg(test)]
 pub(crate) mod tests {
   use crate::objects::tests::file_to_json_object;
   use assert_json_diff::assert_json_include;
+  use lemmy_utils::LemmyError;
   use serde::{de::DeserializeOwned, Serialize};
   use std::collections::HashMap;
 
-  pub(crate) fn test_parse_lemmy_item<T: Serialize + DeserializeOwned>(path: &str) -> T {
-    let parsed = file_to_json_object::<T>(path);
+  /// Check that json deserialize -> serialize -> deserialize gives identical file as initial one.
+  /// Ensures that there are no breaking changes in sent data.
+  pub(crate) fn test_parse_lemmy_item<T: Serialize + DeserializeOwned + std::fmt::Debug>(
+    path: &str,
+  ) -> Result<T, LemmyError> {
+    // parse file as T
+    let parsed = file_to_json_object::<T>(path)?;
 
-    // ensure that no field is ignored when parsing
-    let raw = file_to_json_object::<HashMap<String, serde_json::Value>>(path);
+    // parse file into hashmap, which ensures that every field is included
+    let raw = file_to_json_object::<HashMap<String, serde_json::Value>>(path)?;
+    // assert that all fields are identical, otherwise print diff
     assert_json_include!(actual: &parsed, expected: raw);
-    parsed
+    Ok(parsed)
   }
 }