]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/protocol/objects/instance.rs
implement language tags for site/community in db and api (#2434)
[lemmy.git] / crates / apub / src / protocol / objects / instance.rs
index 2a967ac522ca55f87e0ad256941b7b2a6ed66c87..2df9dcc9547f4fff8de595a9a93ee0c2a52746c5 100644 (file)
@@ -1,25 +1,39 @@
 use crate::{
   objects::instance::ApubSite,
-  protocol::{ImageObject, Source, Unparsed},
+  protocol::{objects::LanguageTag, ImageObject, Source},
+};
+use activitypub_federation::{
+  core::{object_id::ObjectId, signatures::PublicKey},
+  deser::{helpers::deserialize_skip_error, values::MediaTypeHtml},
 };
-use activitystreams_kinds::actor::ServiceType;
 use chrono::{DateTime, FixedOffset};
-use lemmy_apub_lib::{object_id::ObjectId, signatures::PublicKey, values::MediaTypeHtml};
 use serde::{Deserialize, Serialize};
 use serde_with::skip_serializing_none;
 use url::Url;
 
+#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
+pub enum InstanceType {
+  Application,
+  Service,
+}
+
 #[skip_serializing_none]
 #[derive(Clone, Debug, Deserialize, Serialize)]
 #[serde(rename_all = "camelCase")]
 pub struct Instance {
   #[serde(rename = "type")]
-  pub(crate) kind: ServiceType,
+  pub(crate) kind: InstanceType,
   pub(crate) id: ObjectId<ApubSite>,
   // site name
   pub(crate) name: String,
+  pub(crate) inbox: Url,
+  /// mandatory field in activitypub, lemmy currently serves an empty outbox
+  pub(crate) outbox: Url,
+  pub(crate) public_key: PublicKey,
+
   // sidebar
   pub(crate) content: Option<String>,
+  #[serde(deserialize_with = "deserialize_skip_error", default)]
   pub(crate) source: Option<Source>,
   // short instance description
   pub(crate) summary: Option<String>,
@@ -28,12 +42,8 @@ pub struct Instance {
   pub(crate) icon: Option<ImageObject>,
   /// instance banner
   pub(crate) image: Option<ImageObject>,
-  pub(crate) inbox: Url,
-  /// mandatory field in activitypub, currently empty in lemmy
-  pub(crate) outbox: Url,
-  pub(crate) public_key: PublicKey,
+  #[serde(default)]
+  pub(crate) language: Vec<LanguageTag>,
   pub(crate) published: DateTime<FixedOffset>,
   pub(crate) updated: Option<DateTime<FixedOffset>>,
-  #[serde(flatten)]
-  pub(crate) unparsed: Unparsed,
 }