magnetar/ext_activity_pub/src/object/mod.rs

234 lines
8.6 KiB
Rust

use crate::link::Link;
use crate::object::object_types::RefObjectImageLinkUnion;
use crate::{def_ld, Id};
use crate::{ld_document, ld_union, Base, LinkOrUrl, ObjectRaw, ObjectSingle, OneOrMore};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub mod activity;
pub mod actor;
pub mod object_types;
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct Object {
#[serde(rename = "https://www.w3.org/ns/activitystreams#attachment")]
#[serde(skip_serializing_if = "Option::is_none")]
pub attachment: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#attributedTo")]
#[serde(skip_serializing_if = "Option::is_none")]
pub attributed_to: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#audience")]
#[serde(skip_serializing_if = "Option::is_none")]
pub audience: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#content")]
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#contentMap")]
#[serde(skip_serializing_if = "Option::is_none")]
pub content_map: Option<HashMap<String, String>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#context")]
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#name")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#nameMap")]
#[serde(skip_serializing_if = "Option::is_none")]
pub name_map: Option<HashMap<String, String>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#endTime")]
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time: Option<DateTime<Utc>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#generator")]
#[serde(skip_serializing_if = "Option::is_none")]
pub generator: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#icon")]
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<OneOrMore<RefObjectImageLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#image")]
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<OneOrMore<RefObjectImageLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#inReplyTo")]
#[serde(skip_serializing_if = "Option::is_none")]
pub in_reply_to: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#location")]
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#preview")]
#[serde(skip_serializing_if = "Option::is_none")]
pub preview: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#published")]
#[serde(skip_serializing_if = "Option::is_none")]
pub published: Option<DateTime<Utc>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#replies")]
#[serde(skip_serializing_if = "Option::is_none")]
pub replies: Option<RefCollectionLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#startTime")]
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time: Option<DateTime<Utc>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#summary")]
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#summaryMap")]
#[serde(skip_serializing_if = "Option::is_none")]
pub summary_map: Option<HashMap<String, String>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#tag")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#updated")]
#[serde(skip_serializing_if = "Option::is_none")]
pub updated: Option<DateTime<Utc>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#url")]
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<OneOrMore<LinkOrUrl>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#to")]
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#bto")]
#[serde(skip_serializing_if = "Option::is_none")]
pub bto: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#cc")]
#[serde(skip_serializing_if = "Option::is_none")]
pub cc: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#bcc")]
#[serde(skip_serializing_if = "Option::is_none")]
pub bcc: Option<OneOrMore<RefObjectLinkUnion>>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#mediaType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub media_type: Option<String>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#duration")]
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<String>,
// ActivityPub
#[serde(rename = "https://www.w3.org/ns/activitystreams#source")]
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<RefObject>,
}
def_ld!("https://www.w3.org/ns/activitystreams#Object", Object);
ld_document!(RefObject, Object);
ld_union!(
RefObjectLinkUnion,
ObjectLinkUnion,
object_props as Object,
link_props as Link
);
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct Collection {
#[serde(rename = "https://www.w3.org/ns/activitystreams#totalItems")]
#[serde(skip_serializing_if = "Option::is_none")]
pub total_items: Option<u32>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#current")]
#[serde(skip_serializing_if = "Option::is_none")]
pub current: Option<RefCollectionPageLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#first")]
#[serde(skip_serializing_if = "Option::is_none")]
pub first: Option<RefCollectionPageLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#last")]
#[serde(skip_serializing_if = "Option::is_none")]
pub last: Option<RefCollectionPageLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#items")]
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<OneOrMore<RefObjectLinkUnion>>,
}
def_ld!(
"https://www.w3.org/ns/activitystreams#Collection",
Collection
);
ld_document!(RefCollection, Collection);
ld_union!(
RefCollectionLinkUnion,
CollectionLinkUnion,
collection_props as Collection,
link_props as Link
);
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct OrderedCollection {
#[serde(rename = "https://www.w3.org/ns/activitystreams#orderedItems")]
#[serde(skip_serializing_if = "Option::is_none")]
pub ordered_items: Option<OneOrMore<RefObjectLinkUnion>>,
}
def_ld!(
"https://www.w3.org/ns/activitystreams#OrderedCollection",
OrderedCollection
);
ld_document!(RefOrderedCollection, OrderedCollection);
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct CollectionPage {
#[serde(rename = "https://www.w3.org/ns/activitystreams#next")]
#[serde(skip_serializing_if = "Option::is_none")]
pub next: Option<RefCollectionPageLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#prev")]
#[serde(skip_serializing_if = "Option::is_none")]
pub prev: Option<RefCollectionPageLinkUnion>,
#[serde(rename = "https://www.w3.org/ns/activitystreams#partOf")]
#[serde(skip_serializing_if = "Option::is_none")]
pub part_of: Option<RefCollectionLinkUnion>,
}
def_ld!(
"https://www.w3.org/ns/activitystreams#CollectionPage",
CollectionPage
);
ld_document!(RefCollectionPage, CollectionPage);
ld_union!(
RefCollectionPageLinkUnion,
CollectionPageLinkUnion,
page_props as CollectionPage,
link_props as Link
);
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct OrderedCollectionPage {
#[serde(rename = "https://www.w3.org/ns/activitystreams#startIndex")]
#[serde(skip_serializing_if = "Option::is_none")]
pub start_index: Option<u32>,
}
def_ld!(
"https://www.w3.org/ns/activitystreams#OrderedCollectionPage",
OrderedCollectionPage
);
ld_document!(RefOrderedCollectionPage, OrderedCollectionPage);