]> Untitled Git - lemmy.git/blob - crates/apub/src/protocol/objects/instance.rs
add enable_federated_downvotes site option
[lemmy.git] / crates / apub / src / protocol / objects / instance.rs
1 use crate::{
2   objects::instance::ApubSite,
3   protocol::{objects::LanguageTag, ImageObject, Source},
4 };
5 use activitypub_federation::{
6   fetch::object_id::ObjectId,
7   kinds::actor::ApplicationType,
8   protocol::{helpers::deserialize_skip_error, public_key::PublicKey, values::MediaTypeHtml},
9 };
10 use chrono::{DateTime, FixedOffset};
11 use serde::{Deserialize, Serialize};
12 use serde_with::skip_serializing_none;
13 use url::Url;
14
15 #[skip_serializing_none]
16 #[derive(Clone, Debug, Deserialize, Serialize)]
17 #[serde(rename_all = "camelCase")]
18 pub struct Instance {
19   #[serde(rename = "type")]
20   pub(crate) kind: ApplicationType,
21   pub(crate) id: ObjectId<ApubSite>,
22   // site name
23   pub(crate) name: String,
24   pub(crate) inbox: Url,
25   /// mandatory field in activitypub, lemmy currently serves an empty outbox
26   pub(crate) outbox: Url,
27   pub(crate) public_key: PublicKey,
28
29   // sidebar
30   pub(crate) content: Option<String>,
31   #[serde(deserialize_with = "deserialize_skip_error", default)]
32   pub(crate) source: Option<Source>,
33   // short instance description
34   pub(crate) summary: Option<String>,
35   pub(crate) media_type: Option<MediaTypeHtml>,
36   /// instance icon
37   pub(crate) icon: Option<ImageObject>,
38   /// instance banner
39   pub(crate) image: Option<ImageObject>,
40   #[serde(default)]
41   pub(crate) language: Vec<LanguageTag>,
42   pub(crate) published: DateTime<FixedOffset>,
43   pub(crate) updated: Option<DateTime<FixedOffset>>,
44 }