use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use serde_json::Value; use super::vocabulary::HASHTAG; #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Attachment { #[serde(rename = "type")] pub attachment_type: String, pub name: Option, pub media_type: Option, pub url: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct Link { pub href: String, } fn default_tag_type() -> String { HASHTAG.to_string() } #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Tag { pub name: Option, #[serde(rename = "type", default = "default_tag_type")] pub tag_type: String, pub href: Option, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct SimpleTag { #[serde(rename = "type")] pub tag_type: String, pub href: String, pub name: String, } /// https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-e232.md #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct LinkTag { #[serde(rename = "type")] pub tag_type: String, pub href: String, pub media_type: String, pub name: Option, } #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct EmojiTagImage { #[serde(rename = "type")] pub object_type: String, pub url: String, pub media_type: Option, } #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct EmojiTag { #[serde(rename = "type")] pub tag_type: String, pub icon: EmojiTagImage, pub id: String, pub name: String, pub updated: DateTime, } #[derive(Deserialize)] #[cfg_attr(test, derive(Default))] #[serde(rename_all = "camelCase")] pub struct Object { // https://www.w3.org/TR/activitypub/#obj-id // "id" and "type" are required properties pub id: String, #[serde(rename = "type")] pub object_type: String, pub name: Option, pub attachment: Option, pub cc: Option, pub media_type: Option, pub published: Option>, pub attributed_to: Option, pub in_reply_to: Option, pub content: Option, pub quote_url: Option, pub tag: Option, pub to: Option, pub updated: Option>, pub url: Option, }