]> Untitled Git - lemmy.git/commitdiff
Use serde(skip) instead of skip_serializing, add placeholder values (#3362)
authorNutomic <me@nutomic.com>
Mon, 3 Jul 2023 13:14:01 +0000 (15:14 +0200)
committerGitHub <noreply@github.com>
Mon, 3 Jul 2023 13:14:01 +0000 (15:14 +0200)
* Use serde(skip) instead of skip_serializing

The latter breaks lemmy_crawler as the field is not included in
the Lemmy API, but is required when attempting to parse API responses.
Should only use serde(skip) to avoid this problem

* use option

* add placeholders

* no unwrap

crates/db_schema/src/source/community.rs
crates/db_schema/src/source/mod.rs
crates/db_schema/src/source/person.rs

index c24a6459784acc81b0cd3fa35f00f19b2663721f..64b30b2a8a3430a5347ecba2e544c719bcd7b09a 100644 (file)
@@ -1,6 +1,9 @@
-use crate::newtypes::{CommunityId, DbUrl, InstanceId, PersonId};
 #[cfg(feature = "full")]
 use crate::schema::{community, community_follower, community_moderator, community_person_ban};
+use crate::{
+  newtypes::{CommunityId, DbUrl, InstanceId, PersonId},
+  source::placeholder_apub_url,
+};
 use serde::{Deserialize, Serialize};
 use serde_with::skip_serializing_none;
 #[cfg(feature = "full")]
@@ -42,9 +45,9 @@ pub struct Community {
   pub icon: Option<DbUrl>,
   /// A URL for a banner.
   pub banner: Option<DbUrl>,
-  #[serde(skip_serializing)]
+  #[serde(skip, default = "placeholder_apub_url")]
   pub followers_url: DbUrl,
-  #[serde(skip_serializing)]
+  #[serde(skip, default = "placeholder_apub_url")]
   pub inbox_url: DbUrl,
   #[serde(skip)]
   pub shared_inbox_url: Option<DbUrl>,
index 926e23e73d314160f99ee87820fc309bf4fec600..a46f4fb40b505f553d0be92f9d566787e952e76d 100644 (file)
@@ -1,3 +1,6 @@
+use crate::newtypes::DbUrl;
+use url::Url;
+
 #[cfg(feature = "full")]
 pub mod activity;
 pub mod actor_language;
@@ -30,3 +33,13 @@ pub mod registration_application;
 pub mod secret;
 pub mod site;
 pub mod tagline;
+
+/// Default value for columns like [community::Community.inbox_url] which are marked as serde(skip).
+///
+/// This is necessary so they can be successfully deserialized from API responses, even though the
+/// value is not sent by Lemmy. Necessary for crates which rely on Rust API such as lemmy-stats-crawler.
+fn placeholder_apub_url() -> DbUrl {
+  DbUrl(Box::new(
+    Url::parse("http://example.com").expect("parse placeholer url"),
+  ))
+}
index 1500e89831842614df9dd5154caca4073d365d50..82d6f61a2648e51d65fc79bcf13db705aa9c3f37 100644 (file)
@@ -1,6 +1,9 @@
-use crate::newtypes::{DbUrl, InstanceId, PersonId};
 #[cfg(feature = "full")]
 use crate::schema::{person, person_follower};
+use crate::{
+  newtypes::{DbUrl, InstanceId, PersonId},
+  source::placeholder_apub_url,
+};
 use serde::{Deserialize, Serialize};
 use serde_with::skip_serializing_none;
 #[cfg(feature = "full")]
@@ -40,7 +43,7 @@ pub struct Person {
   pub banner: Option<DbUrl>,
   /// Whether the person is deleted.
   pub deleted: bool,
-  #[serde(skip_serializing)]
+  #[serde(skip, default = "placeholder_apub_url")]
   pub inbox_url: DbUrl,
   #[serde(skip)]
   pub shared_inbox_url: Option<DbUrl>,