282 lines
8.5 KiB
Rust
282 lines
8.5 KiB
Rust
use std::str::FromStr;
|
|
|
|
use serde::Deserialize;
|
|
|
|
use super::serde_ext::LDObject;
|
|
|
|
pub const CONTEXT_ID: &str = "https://www.w3.org/ns/activitystreams";
|
|
|
|
#[derive(Default, Debug, Clone, Deserialize)]
|
|
pub struct APContext {
|
|
pub id: Option<String>,
|
|
#[serde(rename = "@context")]
|
|
pub ctx: ContextMap,
|
|
}
|
|
|
|
impl LDObject for APContext {
|
|
fn from_iri(iri: &str) -> Self {
|
|
let mut ctx = Self::default();
|
|
ctx.id = Some(iri.into());
|
|
ctx
|
|
}
|
|
|
|
fn get_iri(&self) -> String {
|
|
self.id.clone().unwrap_or_default()
|
|
}
|
|
}
|
|
|
|
#[derive(Default, Debug, Clone, Deserialize)]
|
|
#[serde(rename_all = "PascalCase")]
|
|
pub struct ContextMap {
|
|
#[serde(rename = "@vocab")]
|
|
pub vocab: String,
|
|
#[serde(rename = "xsd")]
|
|
pub xsd: String,
|
|
#[serde(rename = "as")]
|
|
pub as_field: String,
|
|
#[serde(rename = "ldp")]
|
|
pub ldp: String,
|
|
#[serde(rename = "vcard")]
|
|
pub vcard: String,
|
|
#[serde(rename = "id")]
|
|
pub id: String,
|
|
#[serde(rename = "type")]
|
|
pub type_field: String,
|
|
pub accept: String,
|
|
pub activity: String,
|
|
pub intransitive_activity: String,
|
|
pub add: String,
|
|
pub announce: String,
|
|
pub application: String,
|
|
pub arrive: String,
|
|
pub article: String,
|
|
pub audio: String,
|
|
pub block: String,
|
|
pub collection: String,
|
|
pub collection_page: String,
|
|
pub relationship: String,
|
|
pub create: String,
|
|
pub delete: String,
|
|
pub dislike: String,
|
|
pub document: String,
|
|
pub event: String,
|
|
pub follow: String,
|
|
pub flag: String,
|
|
pub group: String,
|
|
pub ignore: String,
|
|
pub image: String,
|
|
pub invite: String,
|
|
pub join: String,
|
|
pub leave: String,
|
|
pub like: String,
|
|
pub link: String,
|
|
pub mention: String,
|
|
pub note: String,
|
|
pub object: String,
|
|
pub offer: String,
|
|
pub ordered_collection: String,
|
|
pub ordered_collection_page: String,
|
|
pub organization: String,
|
|
pub page: String,
|
|
pub person: String,
|
|
pub place: String,
|
|
pub profile: String,
|
|
pub question: String,
|
|
pub reject: String,
|
|
pub remove: String,
|
|
pub service: String,
|
|
pub tentative_accept: String,
|
|
pub tentative_reject: String,
|
|
pub tombstone: String,
|
|
pub undo: String,
|
|
pub update: String,
|
|
pub video: String,
|
|
pub view: String,
|
|
pub listen: String,
|
|
pub read: String,
|
|
#[serde(rename = "Move")]
|
|
pub move_field: String,
|
|
pub travel: String,
|
|
pub is_following: String,
|
|
pub is_followed_by: String,
|
|
pub is_contact: String,
|
|
pub is_member: String,
|
|
#[serde(rename = "subject")]
|
|
pub subject: Option<TypedField>,
|
|
#[serde(rename = "relationship")]
|
|
pub relationship2: Option<TypedField>,
|
|
#[serde(rename = "actor")]
|
|
pub actor: Option<TypedField>,
|
|
#[serde(rename = "attributedTo")]
|
|
pub attributed_to: Option<TypedField>,
|
|
#[serde(rename = "attachment")]
|
|
pub attachment: Option<TypedField>,
|
|
#[serde(rename = "bcc")]
|
|
pub bcc: Option<TypedField>,
|
|
#[serde(rename = "bto")]
|
|
pub bto: Option<TypedField>,
|
|
#[serde(rename = "cc")]
|
|
pub cc: Option<TypedField>,
|
|
#[serde(rename = "context")]
|
|
pub context: Option<TypedField>,
|
|
#[serde(rename = "current")]
|
|
pub current: Option<TypedField>,
|
|
#[serde(rename = "first")]
|
|
pub first: Option<TypedField>,
|
|
#[serde(rename = "generator")]
|
|
pub generator: Option<TypedField>,
|
|
#[serde(rename = "icon")]
|
|
pub icon: Option<TypedField>,
|
|
#[serde(rename = "image")]
|
|
pub image2: Option<TypedField>,
|
|
#[serde(rename = "inReplyTo")]
|
|
pub in_reply_to: Option<TypedField>,
|
|
#[serde(rename = "items")]
|
|
pub items: Option<TypedField>,
|
|
#[serde(rename = "instrument")]
|
|
pub instrument: Option<TypedField>,
|
|
#[serde(rename = "orderedItems")]
|
|
pub ordered_items: Option<TypedField>,
|
|
#[serde(rename = "last")]
|
|
pub last: Option<TypedField>,
|
|
#[serde(rename = "location")]
|
|
pub location: Option<TypedField>,
|
|
#[serde(rename = "next")]
|
|
pub next: Option<TypedField>,
|
|
#[serde(rename = "object")]
|
|
pub object2: Option<TypedField>,
|
|
#[serde(rename = "oneOf")]
|
|
pub one_of: Option<TypedField>,
|
|
#[serde(rename = "anyOf")]
|
|
pub any_of: Option<TypedField>,
|
|
#[serde(rename = "closed")]
|
|
pub closed: Option<TypedField>,
|
|
#[serde(rename = "origin")]
|
|
pub origin: Option<TypedField>,
|
|
#[serde(rename = "accuracy")]
|
|
pub accuracy: Option<TypedField>,
|
|
#[serde(rename = "prev")]
|
|
pub prev: Option<TypedField>,
|
|
#[serde(rename = "preview")]
|
|
pub preview: Option<TypedField>,
|
|
#[serde(rename = "replies")]
|
|
pub replies: Option<TypedField>,
|
|
#[serde(rename = "result")]
|
|
pub result: Option<TypedField>,
|
|
#[serde(rename = "audience")]
|
|
pub audience: Option<TypedField>,
|
|
#[serde(rename = "partOf")]
|
|
pub part_of: Option<TypedField>,
|
|
#[serde(rename = "tag")]
|
|
pub tag: Option<TypedField>,
|
|
#[serde(rename = "target")]
|
|
pub target: Option<TypedField>,
|
|
#[serde(rename = "to")]
|
|
pub to: Option<TypedField>,
|
|
#[serde(rename = "url")]
|
|
pub url: Option<TypedField>,
|
|
#[serde(rename = "altitude")]
|
|
pub altitude: Option<TypedField>,
|
|
#[serde(rename = "content")]
|
|
pub content: String,
|
|
#[serde(rename = "contentMap")]
|
|
pub content_map: Option<TypedField>,
|
|
#[serde(rename = "name")]
|
|
pub name: String,
|
|
#[serde(rename = "nameMap")]
|
|
pub name_map: Option<TypedField>,
|
|
#[serde(rename = "duration")]
|
|
pub duration: Option<TypedField>,
|
|
#[serde(rename = "endTime")]
|
|
pub end_time: Option<TypedField>,
|
|
#[serde(rename = "height")]
|
|
pub height: Option<TypedField>,
|
|
#[serde(rename = "href")]
|
|
pub href: Option<TypedField>,
|
|
#[serde(rename = "hreflang")]
|
|
pub hreflang: String,
|
|
#[serde(rename = "latitude")]
|
|
pub latitude: Option<TypedField>,
|
|
#[serde(rename = "longitude")]
|
|
pub longitude: Option<TypedField>,
|
|
#[serde(rename = "mediaType")]
|
|
pub media_type: String,
|
|
#[serde(rename = "published")]
|
|
pub published: Option<TypedField>,
|
|
#[serde(rename = "radius")]
|
|
pub radius: Option<TypedField>,
|
|
#[serde(rename = "rel")]
|
|
pub rel: String,
|
|
#[serde(rename = "startIndex")]
|
|
pub start_index: Option<TypedField>,
|
|
#[serde(rename = "startTime")]
|
|
pub start_time: Option<TypedField>,
|
|
#[serde(rename = "summary")]
|
|
pub summary: String,
|
|
#[serde(rename = "summaryMap")]
|
|
pub summary_map: Option<TypedField>,
|
|
#[serde(rename = "totalItems")]
|
|
pub total_items: Option<TypedField>,
|
|
#[serde(rename = "units")]
|
|
pub units: String,
|
|
#[serde(rename = "updated")]
|
|
pub updated: Option<TypedField>,
|
|
#[serde(rename = "width")]
|
|
pub width: Option<TypedField>,
|
|
#[serde(rename = "describes")]
|
|
pub describes: Option<TypedField>,
|
|
#[serde(rename = "formerType")]
|
|
pub former_type: Option<TypedField>,
|
|
#[serde(rename = "deleted")]
|
|
pub deleted: Option<TypedField>,
|
|
#[serde(rename = "inbox")]
|
|
pub inbox: Option<TypedField>,
|
|
#[serde(rename = "outbox")]
|
|
pub outbox: Option<TypedField>,
|
|
#[serde(rename = "following")]
|
|
pub following: Option<TypedField>,
|
|
#[serde(rename = "followers")]
|
|
pub followers: Option<TypedField>,
|
|
#[serde(rename = "streams")]
|
|
pub streams: Option<TypedField>,
|
|
#[serde(rename = "preferredUsername")]
|
|
pub preferred_username: String,
|
|
#[serde(rename = "endpoints")]
|
|
pub endpoints: Option<TypedField>,
|
|
#[serde(rename = "uploadMedia")]
|
|
pub upload_media: Option<TypedField>,
|
|
#[serde(rename = "proxyUrl")]
|
|
pub proxy_url: Option<TypedField>,
|
|
#[serde(rename = "liked")]
|
|
pub liked: Option<TypedField>,
|
|
#[serde(rename = "oauthAuthorizationEndpoint")]
|
|
pub oauth_authorization_endpoint: Option<TypedField>,
|
|
#[serde(rename = "oauthTokenEndpoint")]
|
|
pub oauth_token_endpoint: Option<TypedField>,
|
|
#[serde(rename = "provideClientKey")]
|
|
pub provide_client_key: Option<TypedField>,
|
|
#[serde(rename = "signClientKey")]
|
|
pub sign_client_key: Option<TypedField>,
|
|
#[serde(rename = "sharedInbox")]
|
|
pub shared_inbox: Option<TypedField>,
|
|
pub public: Option<TypedField>,
|
|
#[serde(rename = "source")]
|
|
pub source: String,
|
|
#[serde(rename = "likes")]
|
|
pub likes: Option<TypedField>,
|
|
#[serde(rename = "shares")]
|
|
pub shares: Option<TypedField>,
|
|
#[serde(rename = "alsoKnownAs")]
|
|
pub also_known_as: Option<TypedField>,
|
|
}
|
|
|
|
#[derive(Default, Debug, Clone, Deserialize)]
|
|
pub struct TypedField {
|
|
#[serde(rename = "@id")]
|
|
pub id: String,
|
|
#[serde(rename = "@type")]
|
|
pub kind: Option<String>,
|
|
#[serde(rename = "@container")]
|
|
pub container: Option<String>,
|
|
}
|