234 lines
8.6 KiB
Rust
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);
|