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, #[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, #[serde(rename = "relationship")] pub relationship2: Option, #[serde(rename = "actor")] pub actor: Option, #[serde(rename = "attributedTo")] pub attributed_to: Option, #[serde(rename = "attachment")] pub attachment: Option, #[serde(rename = "bcc")] pub bcc: Option, #[serde(rename = "bto")] pub bto: Option, #[serde(rename = "cc")] pub cc: Option, #[serde(rename = "context")] pub context: Option, #[serde(rename = "current")] pub current: Option, #[serde(rename = "first")] pub first: Option, #[serde(rename = "generator")] pub generator: Option, #[serde(rename = "icon")] pub icon: Option, #[serde(rename = "image")] pub image2: Option, #[serde(rename = "inReplyTo")] pub in_reply_to: Option, #[serde(rename = "items")] pub items: Option, #[serde(rename = "instrument")] pub instrument: Option, #[serde(rename = "orderedItems")] pub ordered_items: Option, #[serde(rename = "last")] pub last: Option, #[serde(rename = "location")] pub location: Option, #[serde(rename = "next")] pub next: Option, #[serde(rename = "object")] pub object2: Option, #[serde(rename = "oneOf")] pub one_of: Option, #[serde(rename = "anyOf")] pub any_of: Option, #[serde(rename = "closed")] pub closed: Option, #[serde(rename = "origin")] pub origin: Option, #[serde(rename = "accuracy")] pub accuracy: Option, #[serde(rename = "prev")] pub prev: Option, #[serde(rename = "preview")] pub preview: Option, #[serde(rename = "replies")] pub replies: Option, #[serde(rename = "result")] pub result: Option, #[serde(rename = "audience")] pub audience: Option, #[serde(rename = "partOf")] pub part_of: Option, #[serde(rename = "tag")] pub tag: Option, #[serde(rename = "target")] pub target: Option, #[serde(rename = "to")] pub to: Option, #[serde(rename = "url")] pub url: Option, #[serde(rename = "altitude")] pub altitude: Option, #[serde(rename = "content")] pub content: String, #[serde(rename = "contentMap")] pub content_map: Option, #[serde(rename = "name")] pub name: String, #[serde(rename = "nameMap")] pub name_map: Option, #[serde(rename = "duration")] pub duration: Option, #[serde(rename = "endTime")] pub end_time: Option, #[serde(rename = "height")] pub height: Option, #[serde(rename = "href")] pub href: Option, #[serde(rename = "hreflang")] pub hreflang: String, #[serde(rename = "latitude")] pub latitude: Option, #[serde(rename = "longitude")] pub longitude: Option, #[serde(rename = "mediaType")] pub media_type: String, #[serde(rename = "published")] pub published: Option, #[serde(rename = "radius")] pub radius: Option, #[serde(rename = "rel")] pub rel: String, #[serde(rename = "startIndex")] pub start_index: Option, #[serde(rename = "startTime")] pub start_time: Option, #[serde(rename = "summary")] pub summary: String, #[serde(rename = "summaryMap")] pub summary_map: Option, #[serde(rename = "totalItems")] pub total_items: Option, #[serde(rename = "units")] pub units: String, #[serde(rename = "updated")] pub updated: Option, #[serde(rename = "width")] pub width: Option, #[serde(rename = "describes")] pub describes: Option, #[serde(rename = "formerType")] pub former_type: Option, #[serde(rename = "deleted")] pub deleted: Option, #[serde(rename = "inbox")] pub inbox: Option, #[serde(rename = "outbox")] pub outbox: Option, #[serde(rename = "following")] pub following: Option, #[serde(rename = "followers")] pub followers: Option, #[serde(rename = "streams")] pub streams: Option, #[serde(rename = "preferredUsername")] pub preferred_username: String, #[serde(rename = "endpoints")] pub endpoints: Option, #[serde(rename = "uploadMedia")] pub upload_media: Option, #[serde(rename = "proxyUrl")] pub proxy_url: Option, #[serde(rename = "liked")] pub liked: Option, #[serde(rename = "oauthAuthorizationEndpoint")] pub oauth_authorization_endpoint: Option, #[serde(rename = "oauthTokenEndpoint")] pub oauth_token_endpoint: Option, #[serde(rename = "provideClientKey")] pub provide_client_key: Option, #[serde(rename = "signClientKey")] pub sign_client_key: Option, #[serde(rename = "sharedInbox")] pub shared_inbox: Option, pub public: Option, #[serde(rename = "source")] pub source: String, #[serde(rename = "likes")] pub likes: Option, #[serde(rename = "shares")] pub shares: Option, #[serde(rename = "alsoKnownAs")] pub also_known_as: Option, } #[derive(Default, Debug, Clone, Deserialize)] pub struct TypedField { #[serde(rename = "@id")] pub id: String, #[serde(rename = "@type")] pub kind: Option, #[serde(rename = "@container")] pub container: Option, }