1 use lemmy_db_schema::{newtypes::LanguageId, source::language::Language, utils::DbPool};
2 use lemmy_utils::error::LemmyError;
3 use serde::{Deserialize, Serialize};
6 pub(crate) mod chat_message;
8 pub(crate) mod instance;
11 pub(crate) mod person;
12 pub(crate) mod tombstone;
14 #[derive(Clone, Debug, Deserialize, Serialize)]
15 #[serde(rename_all = "camelCase")]
16 pub struct Endpoints {
17 pub shared_inbox: Url,
20 /// As specified in https://schema.org/Language
21 #[derive(Clone, Debug, Deserialize, Serialize)]
22 #[serde(rename_all = "camelCase")]
23 pub(crate) struct LanguageTag {
24 pub(crate) identifier: String,
25 pub(crate) name: String,
29 pub(crate) async fn new_single(
32 ) -> Result<Option<LanguageTag>, LemmyError> {
33 let lang = Language::read_from_id(pool, lang).await?;
36 if lang.code == "und" {
40 identifier: lang.code,
46 pub(crate) async fn new_multiple(
47 lang_ids: Vec<LanguageId>,
49 ) -> Result<Vec<LanguageTag>, LemmyError> {
50 let mut langs = Vec::<Language>::new();
53 langs.push(Language::read_from_id(pool, l).await?);
58 .map(|l| LanguageTag {
66 pub(crate) async fn to_language_id_single(
69 ) -> Result<Option<LanguageId>, LemmyError> {
70 let identifier = lang.map(|l| l.identifier);
71 let language = Language::read_id_from_code_opt(pool, identifier.as_deref()).await?;
76 pub(crate) async fn to_language_id_multiple(
79 ) -> Result<Vec<LanguageId>, LemmyError> {
80 let mut language_ids = Vec::new();
83 let id = l.identifier;
84 language_ids.push(Language::read_id_from_code(pool, &id).await?);
93 use crate::protocol::{
95 chat_message::ChatMessage,
101 tombstone::Tombstone,
103 tests::{test_json, test_parse_lemmy_item},
107 fn test_parse_objects_lemmy() {
108 test_parse_lemmy_item::<Instance>("assets/lemmy/objects/instance.json").unwrap();
109 test_parse_lemmy_item::<Group>("assets/lemmy/objects/group.json").unwrap();
110 test_parse_lemmy_item::<Person>("assets/lemmy/objects/person.json").unwrap();
111 test_parse_lemmy_item::<Page>("assets/lemmy/objects/page.json").unwrap();
112 test_parse_lemmy_item::<Note>("assets/lemmy/objects/note.json").unwrap();
113 test_parse_lemmy_item::<ChatMessage>("assets/lemmy/objects/chat_message.json").unwrap();
114 test_parse_lemmy_item::<Tombstone>("assets/lemmy/objects/tombstone.json").unwrap();
118 fn test_parse_objects_pleroma() {
119 test_json::<Person>("assets/pleroma/objects/person.json").unwrap();
120 test_json::<Note>("assets/pleroma/objects/note.json").unwrap();
121 test_json::<ChatMessage>("assets/pleroma/objects/chat_message.json").unwrap();
125 fn test_parse_objects_smithereen() {
126 test_json::<Person>("assets/smithereen/objects/person.json").unwrap();
127 test_json::<Note>("assets/smithereen/objects/note.json").unwrap();
131 fn test_parse_objects_mastodon() {
132 test_json::<Person>("assets/mastodon/objects/person.json").unwrap();
133 test_json::<Note>("assets/mastodon/objects/note.json").unwrap();
137 fn test_parse_objects_lotide() {
138 test_json::<Group>("assets/lotide/objects/group.json").unwrap();
139 test_json::<Person>("assets/lotide/objects/person.json").unwrap();
140 test_json::<Note>("assets/lotide/objects/note.json").unwrap();
141 test_json::<Page>("assets/lotide/objects/page.json").unwrap();
142 test_json::<Tombstone>("assets/lotide/objects/tombstone.json").unwrap();
146 fn test_parse_object_friendica() {
147 test_json::<Person>("assets/friendica/objects/person_1.json").unwrap();
148 test_json::<Person>("assets/friendica/objects/person_2.json").unwrap();
149 test_json::<Page>("assets/friendica/objects/page_1.json").unwrap();
150 test_json::<Page>("assets/friendica/objects/page_2.json").unwrap();
151 test_json::<Note>("assets/friendica/objects/note_1.json").unwrap();
152 test_json::<Note>("assets/friendica/objects/note_2.json").unwrap();
156 fn test_parse_object_gnusocial() {
157 test_json::<Person>("assets/gnusocial/objects/person.json").unwrap();
158 test_json::<Group>("assets/gnusocial/objects/group.json").unwrap();
159 test_json::<Page>("assets/gnusocial/objects/page.json").unwrap();
160 test_json::<Note>("assets/gnusocial/objects/note.json").unwrap();
164 fn test_parse_object_peertube() {
165 test_json::<Person>("assets/peertube/objects/person.json").unwrap();
166 test_json::<Group>("assets/peertube/objects/group.json").unwrap();
167 test_json::<Page>("assets/peertube/objects/video.json").unwrap();
168 test_json::<Note>("assets/peertube/objects/note.json").unwrap();