use crate::{ objects::instance::ApubSite, protocol::{objects::LanguageTag, ImageObject, Source}, }; use activitypub_federation::{ core::{object_id::ObjectId, signatures::PublicKey}, deser::{helpers::deserialize_skip_error, values::MediaTypeHtml}, }; use chrono::{DateTime, FixedOffset}; 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: InstanceType, pub(crate) id: ObjectId, // 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, #[serde(deserialize_with = "deserialize_skip_error", default)] pub(crate) source: Option, // short instance description pub(crate) summary: Option, pub(crate) media_type: Option, /// instance icon pub(crate) icon: Option, /// instance banner pub(crate) image: Option, #[serde(default)] pub(crate) language: Vec, pub(crate) published: DateTime, pub(crate) updated: Option>, }