From 6ea40fa3b29a51d77a2546e33cdc00b015804b74 Mon Sep 17 00:00:00 2001 From: sugyan Date: Tue, 18 Jun 2024 17:23:54 +0900 Subject: [PATCH 1/9] Add moderation methods --- bsky-sdk/src/moderation.rs | 15 ++++--- bsky-sdk/src/moderation/subjects.rs | 3 ++ .../src/moderation/subjects/feed_generator.rs | 24 ++++++++++ .../src/moderation/subjects/notification.rs | 21 +++++++++ bsky-sdk/src/moderation/subjects/user_list.rs | 45 +++++++++++++++++++ bsky-sdk/src/moderation/types.rs | 43 ++++++++++++++---- 6 files changed, 136 insertions(+), 15 deletions(-) create mode 100644 bsky-sdk/src/moderation/subjects/feed_generator.rs create mode 100644 bsky-sdk/src/moderation/subjects/notification.rs create mode 100644 bsky-sdk/src/moderation/subjects/user_list.rs diff --git a/bsky-sdk/src/moderation.rs b/bsky-sdk/src/moderation.rs index 69088a05..2168df7c 100644 --- a/bsky-sdk/src/moderation.rs +++ b/bsky-sdk/src/moderation.rs @@ -46,16 +46,19 @@ impl Moderator { self.decide_post(post) } /// Calculate the moderation decision for a notification. - pub fn moderate_notification(&self) -> ModerationDecision { - todo!() + pub fn moderate_notification(&self, notification: &SubjectNotification) -> ModerationDecision { + self.decide_notification(notification) } /// Calculate the moderation decision for a feed generator. - pub fn moderate_feed_generator(&self) -> ModerationDecision { - todo!() + pub fn moderate_feed_generator( + &self, + feed_generator: &SubjectFeedGenerator, + ) -> ModerationDecision { + self.decide_feed_generator(feed_generator) } /// Calculate the moderation decision for a user list. - pub fn moderate_user_list(&self) -> ModerationDecision { - todo!() + pub fn moderate_user_list(&self, user_list: &SubjectUserList) -> ModerationDecision { + self.decide_user_list(user_list) } } diff --git a/bsky-sdk/src/moderation/subjects.rs b/bsky-sdk/src/moderation/subjects.rs index f998b650..925932a3 100644 --- a/bsky-sdk/src/moderation/subjects.rs +++ b/bsky-sdk/src/moderation/subjects.rs @@ -1,3 +1,6 @@ mod account; +mod feed_generator; +mod notification; mod post; mod profile; +mod user_list; diff --git a/bsky-sdk/src/moderation/subjects/feed_generator.rs b/bsky-sdk/src/moderation/subjects/feed_generator.rs new file mode 100644 index 00000000..990e95c0 --- /dev/null +++ b/bsky-sdk/src/moderation/subjects/feed_generator.rs @@ -0,0 +1,24 @@ +use super::super::decision::ModerationDecision; +use super::super::types::{LabelTarget, SubjectFeedGenerator}; +use super::super::Moderator; + +impl Moderator { + pub(crate) fn decide_feed_generator( + &self, + subject: &SubjectFeedGenerator, + ) -> ModerationDecision { + let mut acc = ModerationDecision::new(); + acc.set_did(subject.creator.did.clone()); + acc.set_is_me(self.user_did.as_ref() == Some(&subject.creator.did)); + if let Some(labels) = &subject.labels { + for label in labels { + acc.add_label(LabelTarget::Content, label, self); + } + } + ModerationDecision::merge(&[ + acc, + self.decide_account(&subject.creator.clone().into()), + self.decide_profile(&subject.creator.clone().into()), + ]) + } +} diff --git a/bsky-sdk/src/moderation/subjects/notification.rs b/bsky-sdk/src/moderation/subjects/notification.rs new file mode 100644 index 00000000..dc4bc5dd --- /dev/null +++ b/bsky-sdk/src/moderation/subjects/notification.rs @@ -0,0 +1,21 @@ +use super::super::decision::ModerationDecision; +use super::super::types::{LabelTarget, SubjectNotification}; +use super::super::Moderator; + +impl Moderator { + pub(crate) fn decide_notification(&self, subject: &SubjectNotification) -> ModerationDecision { + let mut acc = ModerationDecision::new(); + acc.set_did(subject.author.did.clone()); + acc.set_is_me(self.user_did.as_ref() == Some(&subject.author.did)); + if let Some(labels) = &subject.labels { + for label in labels { + acc.add_label(LabelTarget::Content, label, self); + } + } + ModerationDecision::merge(&[ + acc, + self.decide_account(&subject.author.clone().into()), + self.decide_profile(&subject.author.clone().into()), + ]) + } +} diff --git a/bsky-sdk/src/moderation/subjects/user_list.rs b/bsky-sdk/src/moderation/subjects/user_list.rs new file mode 100644 index 00000000..1faa2f98 --- /dev/null +++ b/bsky-sdk/src/moderation/subjects/user_list.rs @@ -0,0 +1,45 @@ +use super::super::decision::ModerationDecision; +use super::super::types::{LabelTarget, SubjectUserList}; +use super::super::Moderator; +use atrium_api::types::string::Did; + +impl Moderator { + pub(crate) fn decide_user_list(&self, subject: &SubjectUserList) -> ModerationDecision { + let mut acc = ModerationDecision::new(); + match subject { + SubjectUserList::ListView(list_view) => { + acc.set_did(list_view.creator.did.clone()); + acc.set_is_me(self.user_did.as_ref() == Some(&list_view.creator.did)); + if let Some(labels) = &list_view.labels { + for label in labels { + acc.add_label(LabelTarget::Content, label, self); + } + } + ModerationDecision::merge(&[ + acc, + self.decide_account(&list_view.creator.clone().into()), + self.decide_profile(&list_view.creator.clone().into()), + ]) + } + SubjectUserList::ListViewBasic(list_view_basic) => { + let did = list_view_basic + .uri + .strip_prefix("at://") + .expect("invalid at-uri") + .split_once('/') + .expect("invalid at-uri") + .0 + .parse::() + .expect("invalid did"); + acc.set_did(did.clone()); + acc.set_is_me(self.user_did.as_ref() == Some(&did)); + if let Some(labels) = &list_view_basic.labels { + for label in labels { + acc.add_label(LabelTarget::Content, label, self); + } + } + acc + } + } + } +} diff --git a/bsky-sdk/src/moderation/types.rs b/bsky-sdk/src/moderation/types.rs index 3b076137..3d1e20ff 100644 --- a/bsky-sdk/src/moderation/types.rs +++ b/bsky-sdk/src/moderation/types.rs @@ -4,8 +4,7 @@ use atrium_api::agent::bluesky::BSKY_LABELER_DID; use atrium_api::app::bsky::actor::defs::{ MutedWord, ProfileView, ProfileViewBasic, ProfileViewDetailed, ViewerState, }; -use atrium_api::app::bsky::feed::defs::PostView; -use atrium_api::app::bsky::graph::defs::ListViewBasic; +use atrium_api::app::bsky::graph::defs::{ListView, ListViewBasic}; use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinitionStrings}; use atrium_api::types::string::Did; use serde::{Deserialize, Serialize}; @@ -486,9 +485,9 @@ impl InterpretedLabelValueDefinitionBehaviors { /// A subject profile. #[derive(Debug)] pub enum SubjectProfile { - ProfileViewBasic(ProfileViewBasic), - ProfileView(ProfileView), - ProfileViewDetailed(ProfileViewDetailed), + ProfileViewBasic(Box), + ProfileView(Box), + ProfileViewDetailed(Box), } impl SubjectProfile { @@ -517,24 +516,50 @@ impl SubjectProfile { impl From for SubjectProfile { fn from(p: ProfileViewBasic) -> Self { - Self::ProfileViewBasic(p) + Self::ProfileViewBasic(Box::new(p)) } } impl From for SubjectProfile { fn from(p: ProfileView) -> Self { - Self::ProfileView(p) + Self::ProfileView(Box::new(p)) } } impl From for SubjectProfile { fn from(p: ProfileViewDetailed) -> Self { - Self::ProfileViewDetailed(p) + Self::ProfileViewDetailed(Box::new(p)) } } /// A subject post. -pub type SubjectPost = PostView; +pub type SubjectPost = atrium_api::app::bsky::feed::defs::PostView; + +/// A subject notification. +pub type SubjectNotification = + atrium_api::app::bsky::notification::list_notifications::Notification; + +/// A subject feed generator. +pub type SubjectFeedGenerator = atrium_api::app::bsky::feed::defs::GeneratorView; + +/// A subject user list. +#[derive(Debug)] +pub enum SubjectUserList { + ListView(Box), + ListViewBasic(Box), +} + +impl From for SubjectUserList { + fn from(list_view: ListView) -> Self { + Self::ListView(Box::new(list_view)) + } +} + +impl From for SubjectUserList { + fn from(list_view_basic: ListViewBasic) -> Self { + Self::ListViewBasic(Box::new(list_view_basic)) + } +} /// A cause for moderation decisions. #[derive(Debug, Clone)] From 9758c3b206476bf04684844560cc3ad49f87a462 Mon Sep 17 00:00:00 2001 From: sugyan Date: Tue, 18 Jun 2024 23:16:48 +0900 Subject: [PATCH 2/9] Add extra_data... --- atrium-api/src/agent.rs | 10 + atrium-api/src/app/bsky/actor/defs.rs | 42 +++ .../src/app/bsky/actor/get_preferences.rs | 7 +- atrium-api/src/app/bsky/actor/get_profile.rs | 2 + atrium-api/src/app/bsky/actor/get_profiles.rs | 4 + .../src/app/bsky/actor/get_suggestions.rs | 4 + atrium-api/src/app/bsky/actor/profile.rs | 2 + .../src/app/bsky/actor/put_preferences.rs | 2 + .../src/app/bsky/actor/search_actors.rs | 4 + .../app/bsky/actor/search_actors_typeahead.rs | 4 + atrium-api/src/app/bsky/embed/external.rs | 8 + atrium-api/src/app/bsky/embed/images.rs | 10 + atrium-api/src/app/bsky/embed/record.rs | 10 + .../src/app/bsky/embed/record_with_media.rs | 4 + atrium-api/src/app/bsky/feed/defs.rs | 30 +++ .../app/bsky/feed/describe_feed_generator.rs | 6 + atrium-api/src/app/bsky/feed/generator.rs | 2 + .../src/app/bsky/feed/get_actor_feeds.rs | 4 + .../src/app/bsky/feed/get_actor_likes.rs | 4 + .../src/app/bsky/feed/get_author_feed.rs | 4 + atrium-api/src/app/bsky/feed/get_feed.rs | 4 + .../src/app/bsky/feed/get_feed_generator.rs | 4 + .../src/app/bsky/feed/get_feed_generators.rs | 4 + .../src/app/bsky/feed/get_feed_skeleton.rs | 4 + atrium-api/src/app/bsky/feed/get_likes.rs | 6 + atrium-api/src/app/bsky/feed/get_list_feed.rs | 4 + .../src/app/bsky/feed/get_post_thread.rs | 4 + atrium-api/src/app/bsky/feed/get_posts.rs | 4 + .../src/app/bsky/feed/get_reposted_by.rs | 4 + .../src/app/bsky/feed/get_suggested_feeds.rs | 4 + atrium-api/src/app/bsky/feed/get_timeline.rs | 4 + atrium-api/src/app/bsky/feed/like.rs | 2 + atrium-api/src/app/bsky/feed/post.rs | 8 + atrium-api/src/app/bsky/feed/repost.rs | 2 + atrium-api/src/app/bsky/feed/search_posts.rs | 4 + .../src/app/bsky/feed/send_interactions.rs | 7 +- atrium-api/src/app/bsky/feed/threadgate.rs | 14 +- atrium-api/src/app/bsky/graph/block.rs | 2 + atrium-api/src/app/bsky/graph/defs.rs | 12 + atrium-api/src/app/bsky/graph/follow.rs | 2 + atrium-api/src/app/bsky/graph/get_blocks.rs | 4 + .../src/app/bsky/graph/get_followers.rs | 4 + atrium-api/src/app/bsky/graph/get_follows.rs | 4 + .../src/app/bsky/graph/get_known_followers.rs | 4 + atrium-api/src/app/bsky/graph/get_list.rs | 4 + .../src/app/bsky/graph/get_list_blocks.rs | 4 + .../src/app/bsky/graph/get_list_mutes.rs | 4 + atrium-api/src/app/bsky/graph/get_lists.rs | 4 + atrium-api/src/app/bsky/graph/get_mutes.rs | 4 + .../src/app/bsky/graph/get_relationships.rs | 4 + .../graph/get_suggested_follows_by_actor.rs | 4 + atrium-api/src/app/bsky/graph/list.rs | 2 + atrium-api/src/app/bsky/graph/listblock.rs | 2 + atrium-api/src/app/bsky/graph/listitem.rs | 2 + atrium-api/src/app/bsky/graph/mute_actor.rs | 2 + .../src/app/bsky/graph/mute_actor_list.rs | 2 + atrium-api/src/app/bsky/graph/mute_thread.rs | 2 + atrium-api/src/app/bsky/graph/unmute_actor.rs | 2 + .../src/app/bsky/graph/unmute_actor_list.rs | 2 + .../src/app/bsky/graph/unmute_thread.rs | 2 + atrium-api/src/app/bsky/labeler/defs.rs | 8 + .../src/app/bsky/labeler/get_services.rs | 4 + atrium-api/src/app/bsky/labeler/service.rs | 2 + .../app/bsky/notification/get_unread_count.rs | 4 + .../bsky/notification/list_notifications.rs | 6 + .../app/bsky/notification/register_push.rs | 2 + .../src/app/bsky/notification/update_seen.rs | 2 + atrium-api/src/app/bsky/richtext/facet.rs | 10 + atrium-api/src/app/bsky/unspecced/defs.rs | 4 + .../unspecced/get_popular_feed_generators.rs | 4 + .../unspecced/get_suggestions_skeleton.rs | 4 + .../bsky/unspecced/get_tagged_suggestions.rs | 9 +- .../bsky/unspecced/search_actors_skeleton.rs | 4 + .../bsky/unspecced/search_posts_skeleton.rs | 4 + atrium-api/src/chat/bsky/actor/declaration.rs | 2 + atrium-api/src/chat/bsky/actor/defs.rs | 2 + .../src/chat/bsky/actor/delete_account.rs | 5 +- atrium-api/src/chat/bsky/convo/defs.rs | 20 ++ .../bsky/convo/delete_message_for_self.rs | 2 + atrium-api/src/chat/bsky/convo/get_convo.rs | 4 + .../chat/bsky/convo/get_convo_for_members.rs | 4 + atrium-api/src/chat/bsky/convo/get_log.rs | 4 + .../src/chat/bsky/convo/get_messages.rs | 4 + atrium-api/src/chat/bsky/convo/leave_convo.rs | 4 + atrium-api/src/chat/bsky/convo/list_convos.rs | 4 + atrium-api/src/chat/bsky/convo/mute_convo.rs | 4 + .../src/chat/bsky/convo/send_message.rs | 2 + .../src/chat/bsky/convo/send_message_batch.rs | 6 + .../src/chat/bsky/convo/unmute_convo.rs | 4 + atrium-api/src/chat/bsky/convo/update_read.rs | 4 + .../bsky/moderation/get_actor_metadata.rs | 6 + .../bsky/moderation/get_message_context.rs | 4 + .../bsky/moderation/update_actor_access.rs | 2 + atrium-api/src/com/atproto/admin/defs.rs | 8 + .../src/com/atproto/admin/delete_account.rs | 2 + .../atproto/admin/disable_account_invites.rs | 2 + .../com/atproto/admin/disable_invite_codes.rs | 2 + .../atproto/admin/enable_account_invites.rs | 2 + .../src/com/atproto/admin/get_account_info.rs | 2 + .../com/atproto/admin/get_account_infos.rs | 4 + .../src/com/atproto/admin/get_invite_codes.rs | 4 + .../com/atproto/admin/get_subject_status.rs | 4 + .../src/com/atproto/admin/search_accounts.rs | 4 + .../src/com/atproto/admin/send_email.rs | 4 + .../com/atproto/admin/update_account_email.rs | 2 + .../atproto/admin/update_account_handle.rs | 2 + .../atproto/admin/update_account_password.rs | 2 + .../atproto/admin/update_subject_status.rs | 4 + .../get_recommended_did_credentials.rs | 2 + .../com/atproto/identity/resolve_handle.rs | 4 + .../atproto/identity/sign_plc_operation.rs | 4 + .../atproto/identity/submit_plc_operation.rs | 2 + .../src/com/atproto/identity/update_handle.rs | 2 + atrium-api/src/com/atproto/label/defs.rs | 10 + .../src/com/atproto/label/query_labels.rs | 4 + .../src/com/atproto/label/subscribe_labels.rs | 6 + .../com/atproto/moderation/create_report.rs | 4 + .../src/com/atproto/repo/apply_writes.rs | 8 + .../src/com/atproto/repo/create_record.rs | 4 + .../src/com/atproto/repo/delete_record.rs | 2 + .../src/com/atproto/repo/describe_repo.rs | 4 + atrium-api/src/com/atproto/repo/get_record.rs | 4 + .../com/atproto/repo/list_missing_blobs.rs | 6 + .../src/com/atproto/repo/list_records.rs | 6 + atrium-api/src/com/atproto/repo/put_record.rs | 4 + atrium-api/src/com/atproto/repo/strong_ref.rs | 2 + .../src/com/atproto/repo/upload_blob.rs | 2 + .../atproto/server/check_account_status.rs | 2 + .../src/com/atproto/server/confirm_email.rs | 2 + .../src/com/atproto/server/create_account.rs | 4 + .../com/atproto/server/create_app_password.rs | 4 + .../com/atproto/server/create_invite_code.rs | 4 + .../com/atproto/server/create_invite_codes.rs | 6 + .../src/com/atproto/server/create_session.rs | 4 + .../com/atproto/server/deactivate_account.rs | 2 + atrium-api/src/com/atproto/server/defs.rs | 4 + .../src/com/atproto/server/delete_account.rs | 2 + .../src/com/atproto/server/describe_server.rs | 6 + .../server/get_account_invite_codes.rs | 4 + .../com/atproto/server/get_service_auth.rs | 4 + .../src/com/atproto/server/get_session.rs | 2 + .../com/atproto/server/list_app_passwords.rs | 4 + .../src/com/atproto/server/refresh_session.rs | 2 + .../atproto/server/request_email_update.rs | 2 + .../atproto/server/request_password_reset.rs | 2 + .../com/atproto/server/reserve_signing_key.rs | 4 + .../src/com/atproto/server/reset_password.rs | 2 + .../com/atproto/server/revoke_app_password.rs | 2 + .../src/com/atproto/server/update_email.rs | 2 + atrium-api/src/com/atproto/sync/get_blob.rs | 2 + atrium-api/src/com/atproto/sync/get_blocks.rs | 2 + .../src/com/atproto/sync/get_checkout.rs | 2 + atrium-api/src/com/atproto/sync/get_head.rs | 4 + .../src/com/atproto/sync/get_latest_commit.rs | 4 + atrium-api/src/com/atproto/sync/get_record.rs | 2 + atrium-api/src/com/atproto/sync/get_repo.rs | 2 + .../src/com/atproto/sync/get_repo_status.rs | 4 + atrium-api/src/com/atproto/sync/list_blobs.rs | 4 + atrium-api/src/com/atproto/sync/list_repos.rs | 6 + .../src/com/atproto/sync/notify_of_update.rs | 2 + .../src/com/atproto/sync/request_crawl.rs | 2 + .../src/com/atproto/sync/subscribe_repos.rs | 18 ++ .../com/atproto/temp/check_signup_queue.rs | 2 + .../src/com/atproto/temp/fetch_labels.rs | 4 + .../temp/request_phone_verification.rs | 2 + .../ozone/communication/create_template.rs | 2 + .../src/tools/ozone/communication/defs.rs | 2 + .../ozone/communication/delete_template.rs | 2 + .../ozone/communication/list_templates.rs | 2 + .../ozone/communication/update_template.rs | 2 + atrium-api/src/tools/ozone/moderation/defs.rs | 58 +++++ .../src/tools/ozone/moderation/emit_event.rs | 2 + .../src/tools/ozone/moderation/get_event.rs | 2 + .../src/tools/ozone/moderation/get_record.rs | 2 + .../src/tools/ozone/moderation/get_repo.rs | 2 + .../tools/ozone/moderation/query_events.rs | 4 + .../tools/ozone/moderation/query_statuses.rs | 4 + .../tools/ozone/moderation/search_repos.rs | 4 + .../src/tools/ozone/server/get_config.rs | 6 + atrium-api/src/types.rs | 2 + atrium-cli/src/runner.rs | 33 ++- bsky-sdk/src/agent.rs | 33 ++- bsky-sdk/src/agent/builder.rs | 2 + bsky-sdk/src/moderation/tests.rs | 13 + bsky-sdk/src/moderation/tests/behaviors.rs | 3 + .../src/moderation/tests/custom_labels.rs | 2 + bsky-sdk/src/moderation/tests/mutewords.rs | 244 ++++-------------- bsky-sdk/src/moderation/tests/quoteposts.rs | 6 +- bsky-sdk/src/preference.rs | 67 +++++ bsky-sdk/src/rich_text.rs | 10 +- bsky-sdk/src/rich_text/detection.rs | 14 +- bsky-sdk/src/rich_text/tests.rs | 10 +- lexicon/atrium-codegen/src/token_stream.rs | 2 + 193 files changed, 1067 insertions(+), 206 deletions(-) diff --git a/atrium-api/src/agent.rs b/atrium-api/src/agent.rs index 3d003986..38eaf46f 100644 --- a/atrium-api/src/agent.rs +++ b/atrium-api/src/agent.rs @@ -7,6 +7,7 @@ pub mod store; use self::store::SessionStore; use crate::client::Service; use crate::types::string::Did; +use crate::types::EMPTY_EXTRA_DATA; use atrium_xrpc::error::Error; use atrium_xrpc::XrpcClient; use std::sync::Arc; @@ -71,6 +72,7 @@ where auth_factor_token: None, identifier: identifier.as_ref().into(), password: password.as_ref().into(), + extra_data: EMPTY_EXTRA_DATA, }) .await?; self.store.set_session(result.clone()).await; @@ -226,6 +228,7 @@ mod tests { handle: "example.com".parse().expect("valid"), refresh_jwt: String::from("refresh"), status: None, + extra_data: EMPTY_EXTRA_DATA, }, )?); } @@ -239,6 +242,7 @@ mod tests { invite_code_required: None, links: None, phone_verification_required: None, + extra_data: EMPTY_EXTRA_DATA, }, )?); } @@ -278,6 +282,7 @@ mod tests { handle: "example.com".parse().expect("valid"), refresh_jwt: String::from("refresh"), status: None, + extra_data: EMPTY_EXTRA_DATA, } } @@ -342,6 +347,7 @@ mod tests { email_confirmed: session.email_confirmed, handle: session.handle.clone(), status: session.status.clone(), + extra_data: EMPTY_EXTRA_DATA, }), ..Default::default() }, @@ -376,6 +382,7 @@ mod tests { email_confirmed: session.email_confirmed, handle: session.handle.clone(), status: session.status.clone(), + extra_data: EMPTY_EXTRA_DATA, }), ..Default::default() }, @@ -418,6 +425,7 @@ mod tests { email_confirmed: session.email_confirmed, handle: session.handle.clone(), status: session.status.clone(), + extra_data: EMPTY_EXTRA_DATA, }), ..Default::default() }, @@ -473,6 +481,7 @@ mod tests { email_confirmed: session.email_confirmed, handle: session.handle.clone(), status: session.status.clone(), + extra_data: EMPTY_EXTRA_DATA, }), ..Default::default() }, @@ -522,6 +531,7 @@ mod tests { email_confirmed: session.email_confirmed, handle: session.handle.clone(), status: session.status.clone(), + extra_data: EMPTY_EXTRA_DATA, }), ..Default::default() }, diff --git a/atrium-api/src/app/bsky/actor/defs.rs b/atrium-api/src/app/bsky/actor/defs.rs index c7052b24..0c6206e5 100644 --- a/atrium-api/src/app/bsky/actor/defs.rs +++ b/atrium-api/src/app/bsky/actor/defs.rs @@ -4,6 +4,8 @@ #[serde(rename_all = "camelCase")] pub struct AdultContentPref { pub enabled: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -13,6 +15,8 @@ pub struct ContentLabelPref { #[serde(skip_serializing_if = "Option::is_none")] pub labeler_did: Option, pub visibility: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -34,18 +38,24 @@ pub struct FeedViewPref { ///Hide reposts in the feed. #[serde(skip_serializing_if = "Option::is_none")] pub hide_reposts: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct HiddenPostsPref { ///A list of URIs of posts the account owner has hidden. pub items: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct InterestsPref { ///A list of tags which describe the account owner's interests gathered during onboarding. pub tags: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///The subject's followers whom you also follow #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -53,16 +63,22 @@ pub struct InterestsPref { pub struct KnownFollowers { pub count: i64, pub followers: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct LabelerPrefItem { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct LabelersPref { pub labelers: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///A word that the account owner has muted. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -72,6 +88,8 @@ pub struct MutedWord { pub targets: Vec, ///The muted word itself. pub value: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type MutedWordTarget = String; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -79,6 +97,8 @@ pub type MutedWordTarget = String; pub struct MutedWordsPref { ///A list of words the account owner has muted. pub items: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -86,6 +106,8 @@ pub struct PersonalDetailsPref { ///The birth date of account owner. #[serde(skip_serializing_if = "Option::is_none")] pub birth_date: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Preferences = Vec>; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -99,11 +121,15 @@ pub struct ProfileAssociated { pub labeler: Option, #[serde(skip_serializing_if = "Option::is_none")] pub lists: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ProfileAssociatedChat { pub allow_incoming: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -124,6 +150,8 @@ pub struct ProfileView { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -140,6 +168,8 @@ pub struct ProfileViewBasic { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -168,6 +198,8 @@ pub struct ProfileViewDetailed { pub posts_count: Option, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -176,6 +208,8 @@ pub struct SavedFeed { pub pinned: bool, pub r#type: String, pub value: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -184,11 +218,15 @@ pub struct SavedFeedsPref { pub saved: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub timeline_index: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct SavedFeedsPrefV2 { pub items: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -199,6 +237,8 @@ pub struct ThreadViewPref { ///Sorting mode for threads. #[serde(skip_serializing_if = "Option::is_none")] pub sort: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -220,6 +260,8 @@ pub struct ViewerState { pub muted: Option, #[serde(skip_serializing_if = "Option::is_none")] pub muted_by_list: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/actor/get_preferences.rs b/atrium-api/src/app/bsky/actor/get_preferences.rs index 6d00f5fb..98adfed6 100644 --- a/atrium-api/src/app/bsky/actor/get_preferences.rs +++ b/atrium-api/src/app/bsky/actor/get_preferences.rs @@ -3,11 +3,16 @@ pub const NSID: &str = "app.bsky.actor.getPreferences"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters {} +pub struct Parameters { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub preferences: crate::app::bsky::actor::defs::Preferences, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/get_profile.rs b/atrium-api/src/app/bsky/actor/get_profile.rs index 7f6bb809..51c6133d 100644 --- a/atrium-api/src/app/bsky/actor/get_profile.rs +++ b/atrium-api/src/app/bsky/actor/get_profile.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "app.bsky.actor.getProfile"; pub struct Parameters { ///Handle or DID of account to fetch profile of. pub actor: crate::types::string::AtIdentifier, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::app::bsky::actor::defs::ProfileViewDetailed; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/app/bsky/actor/get_profiles.rs b/atrium-api/src/app/bsky/actor/get_profiles.rs index 01db5a12..6d0c4760 100644 --- a/atrium-api/src/app/bsky/actor/get_profiles.rs +++ b/atrium-api/src/app/bsky/actor/get_profiles.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "app.bsky.actor.getProfiles"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub actors: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub profiles: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/get_suggestions.rs b/atrium-api/src/app/bsky/actor/get_suggestions.rs index ce6c9997..a5de9e06 100644 --- a/atrium-api/src/app/bsky/actor/get_suggestions.rs +++ b/atrium-api/src/app/bsky/actor/get_suggestions.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/profile.rs b/atrium-api/src/app/bsky/actor/profile.rs index a72c0622..f253a410 100644 --- a/atrium-api/src/app/bsky/actor/profile.rs +++ b/atrium-api/src/app/bsky/actor/profile.rs @@ -17,6 +17,8 @@ pub struct Record { ///Self-label values, specific to the Bluesky application, on the overall account. #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/actor/put_preferences.rs b/atrium-api/src/app/bsky/actor/put_preferences.rs index 69ca8177..3d91e93f 100644 --- a/atrium-api/src/app/bsky/actor/put_preferences.rs +++ b/atrium-api/src/app/bsky/actor/put_preferences.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.actor.putPreferences"; #[serde(rename_all = "camelCase")] pub struct Input { pub preferences: crate::app::bsky::actor::defs::Preferences, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/search_actors.rs b/atrium-api/src/app/bsky/actor/search_actors.rs index eae2643d..b1f88ba4 100644 --- a/atrium-api/src/app/bsky/actor/search_actors.rs +++ b/atrium-api/src/app/bsky/actor/search_actors.rs @@ -14,6 +14,8 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead. #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -21,6 +23,8 @@ pub struct Output { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs b/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs index 78ada613..bec3d87a 100644 --- a/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs +++ b/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs @@ -12,11 +12,15 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead. #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub actors: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/embed/external.rs b/atrium-api/src/app/bsky/embed/external.rs index 08699c1e..026aac99 100644 --- a/atrium-api/src/app/bsky/embed/external.rs +++ b/atrium-api/src/app/bsky/embed/external.rs @@ -5,6 +5,8 @@ #[serde(rename_all = "camelCase")] pub struct Main { pub external: External, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -14,11 +16,15 @@ pub struct External { pub thumb: Option, pub title: String, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct View { pub external: ViewExternal, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -28,4 +34,6 @@ pub struct ViewExternal { pub thumb: Option, pub title: String, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/embed/images.rs b/atrium-api/src/app/bsky/embed/images.rs index 0acdba67..38618176 100644 --- a/atrium-api/src/app/bsky/embed/images.rs +++ b/atrium-api/src/app/bsky/embed/images.rs @@ -5,6 +5,8 @@ #[serde(rename_all = "camelCase")] pub struct Main { pub images: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -12,6 +14,8 @@ pub struct Main { pub struct AspectRatio { pub height: core::num::NonZeroU64, pub width: core::num::NonZeroU64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -21,11 +25,15 @@ pub struct Image { #[serde(skip_serializing_if = "Option::is_none")] pub aspect_ratio: Option, pub image: crate::types::BlobRef, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct View { pub images: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -38,4 +46,6 @@ pub struct ViewImage { pub fullsize: String, ///Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. pub thumb: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/embed/record.rs b/atrium-api/src/app/bsky/embed/record.rs index f7d5d87a..0b2789d3 100644 --- a/atrium-api/src/app/bsky/embed/record.rs +++ b/atrium-api/src/app/bsky/embed/record.rs @@ -5,11 +5,15 @@ #[serde(rename_all = "camelCase")] pub struct Main { pub record: crate::com::atproto::repo::strong_ref::Main, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct View { pub record: crate::types::Union, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,12 +21,16 @@ pub struct ViewBlocked { pub author: crate::app::bsky::feed::defs::BlockedAuthor, pub blocked: bool, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ViewNotFound { pub not_found: bool, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -43,6 +51,8 @@ pub struct ViewRecord { pub uri: String, ///The record data itself. pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/embed/record_with_media.rs b/atrium-api/src/app/bsky/embed/record_with_media.rs index b233e887..eeb89a31 100644 --- a/atrium-api/src/app/bsky/embed/record_with_media.rs +++ b/atrium-api/src/app/bsky/embed/record_with_media.rs @@ -6,12 +6,16 @@ pub struct Main { pub media: crate::types::Union, pub record: crate::app::bsky::embed::record::Main, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct View { pub media: crate::types::Union, pub record: crate::app::bsky::embed::record::View, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/feed/defs.rs b/atrium-api/src/app/bsky/feed/defs.rs index 825f2fba..e76bfc3a 100644 --- a/atrium-api/src/app/bsky/feed/defs.rs +++ b/atrium-api/src/app/bsky/feed/defs.rs @@ -6,6 +6,8 @@ pub struct BlockedAuthor { pub did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -13,6 +15,8 @@ pub struct BlockedPost { pub author: BlockedAuthor, pub blocked: bool, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///User clicked through to the author of the feed item pub const CLICKTHROUGH_AUTHOR: &str = "app.bsky.feed.defs#clickthroughAuthor"; @@ -33,6 +37,8 @@ pub struct FeedViewPost { pub reason: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub reply: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -57,12 +63,16 @@ pub struct GeneratorView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct GeneratorViewerState { #[serde(skip_serializing_if = "Option::is_none")] pub like: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -74,6 +84,8 @@ pub struct Interaction { pub feed_context: Option, #[serde(skip_serializing_if = "Option::is_none")] pub item: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///User liked the feed item pub const INTERACTION_LIKE: &str = "app.bsky.feed.defs#interactionLike"; @@ -92,6 +104,8 @@ pub const INTERACTION_SHARE: &str = "app.bsky.feed.defs#interactionShare"; pub struct NotFoundPost { pub not_found: bool, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -115,12 +129,16 @@ pub struct PostView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ReasonRepost { pub by: crate::app::bsky::actor::defs::ProfileViewBasic, pub indexed_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -130,6 +148,8 @@ pub struct ReplyRef { pub grandparent_author: Option, pub parent: crate::types::Union, pub root: crate::types::Union, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Request that less content like the given feed item be shown in the feed pub const REQUEST_LESS: &str = "app.bsky.feed.defs#requestLess"; @@ -144,11 +164,15 @@ pub struct SkeletonFeedPost { pub post: String, #[serde(skip_serializing_if = "Option::is_none")] pub reason: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct SkeletonReasonRepost { pub repost: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -158,6 +182,8 @@ pub struct ThreadViewPost { pub post: PostView, #[serde(skip_serializing_if = "Option::is_none")] pub replies: Option>>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -170,6 +196,8 @@ pub struct ThreadgateView { pub record: Option, #[serde(skip_serializing_if = "Option::is_none")] pub uri: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -183,6 +211,8 @@ pub struct ViewerState { pub repost: Option, #[serde(skip_serializing_if = "Option::is_none")] pub thread_muted: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/feed/describe_feed_generator.rs b/atrium-api/src/app/bsky/feed/describe_feed_generator.rs index 541f2733..4e45534e 100644 --- a/atrium-api/src/app/bsky/feed/describe_feed_generator.rs +++ b/atrium-api/src/app/bsky/feed/describe_feed_generator.rs @@ -8,6 +8,8 @@ pub struct Output { pub feeds: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub links: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -21,6 +23,8 @@ impl std::fmt::Display for Error { #[serde(rename_all = "camelCase")] pub struct Feed { pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -29,4 +33,6 @@ pub struct Links { pub privacy_policy: Option, #[serde(skip_serializing_if = "Option::is_none")] pub terms_of_service: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/feed/generator.rs b/atrium-api/src/app/bsky/feed/generator.rs index d6c6b137..5de7600e 100644 --- a/atrium-api/src/app/bsky/feed/generator.rs +++ b/atrium-api/src/app/bsky/feed/generator.rs @@ -18,6 +18,8 @@ pub struct Record { ///Self-label values #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/feed/get_actor_feeds.rs b/atrium-api/src/app/bsky/feed/get_actor_feeds.rs index 5a76d486..b68faba9 100644 --- a/atrium-api/src/app/bsky/feed/get_actor_feeds.rs +++ b/atrium-api/src/app/bsky/feed/get_actor_feeds.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_actor_likes.rs b/atrium-api/src/app/bsky/feed/get_actor_likes.rs index 2d8762fa..3e5acde6 100644 --- a/atrium-api/src/app/bsky/feed/get_actor_likes.rs +++ b/atrium-api/src/app/bsky/feed/get_actor_likes.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_author_feed.rs b/atrium-api/src/app/bsky/feed/get_author_feed.rs index 2c478850..5ba3b7c7 100644 --- a/atrium-api/src/app/bsky/feed/get_author_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_author_feed.rs @@ -12,6 +12,8 @@ pub struct Parameters { pub filter: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -19,6 +21,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_feed.rs b/atrium-api/src/app/bsky/feed/get_feed.rs index 54629da6..fe00f07b 100644 --- a/atrium-api/src/app/bsky/feed/get_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_feed.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub feed: String, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_feed_generator.rs b/atrium-api/src/app/bsky/feed/get_feed_generator.rs index 5e261e4f..151a3aaa 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_generator.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_generator.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "app.bsky.feed.getFeedGenerator"; pub struct Parameters { ///AT-URI of the feed generator record. pub feed: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { ///Indicates whether the feed generator service is compatible with the record declaration. pub is_valid: bool, pub view: crate::app::bsky::feed::defs::GeneratorView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_feed_generators.rs b/atrium-api/src/app/bsky/feed/get_feed_generators.rs index da491b8b..825aa86a 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_generators.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_generators.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "app.bsky.feed.getFeedGenerators"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub feeds: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub feeds: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs b/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs index 825c909e..e5edfb69 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub feed: String, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_likes.rs b/atrium-api/src/app/bsky/feed/get_likes.rs index 9056977d..ff426fd5 100644 --- a/atrium-api/src/app/bsky/feed/get_likes.rs +++ b/atrium-api/src/app/bsky/feed/get_likes.rs @@ -13,6 +13,8 @@ pub struct Parameters { pub limit: Option>, ///AT-URI of the subject (eg, a post record). pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -23,6 +25,8 @@ pub struct Output { pub cursor: Option, pub likes: Vec, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -38,4 +42,6 @@ pub struct Like { pub actor: crate::app::bsky::actor::defs::ProfileView, pub created_at: crate::types::string::Datetime, pub indexed_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/feed/get_list_feed.rs b/atrium-api/src/app/bsky/feed/get_list_feed.rs index 5be27703..5a878edb 100644 --- a/atrium-api/src/app/bsky/feed/get_list_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_list_feed.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub limit: Option>, ///Reference (AT-URI) to the list record. pub list: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_post_thread.rs b/atrium-api/src/app/bsky/feed/get_post_thread.rs index 03259c52..5d4a1050 100644 --- a/atrium-api/src/app/bsky/feed/get_post_thread.rs +++ b/atrium-api/src/app/bsky/feed/get_post_thread.rs @@ -12,11 +12,15 @@ pub struct Parameters { pub parent_height: Option>, ///Reference (AT-URI) to post record. pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub thread: crate::types::Union, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_posts.rs b/atrium-api/src/app/bsky/feed/get_posts.rs index d0d68205..d7eec601 100644 --- a/atrium-api/src/app/bsky/feed/get_posts.rs +++ b/atrium-api/src/app/bsky/feed/get_posts.rs @@ -6,11 +6,15 @@ pub const NSID: &str = "app.bsky.feed.getPosts"; pub struct Parameters { ///List of post AT-URIs to return hydrated views for. pub uris: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub posts: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_reposted_by.rs b/atrium-api/src/app/bsky/feed/get_reposted_by.rs index f61a90d0..a00c83b5 100644 --- a/atrium-api/src/app/bsky/feed/get_reposted_by.rs +++ b/atrium-api/src/app/bsky/feed/get_reposted_by.rs @@ -13,6 +13,8 @@ pub struct Parameters { pub limit: Option>, ///Reference (AT-URI) of post record pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -23,6 +25,8 @@ pub struct Output { pub cursor: Option, pub reposted_by: Vec, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs b/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs index a31b166c..14993c71 100644 --- a/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs +++ b/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/get_timeline.rs b/atrium-api/src/app/bsky/feed/get_timeline.rs index 44c812ea..58db219b 100644 --- a/atrium-api/src/app/bsky/feed/get_timeline.rs +++ b/atrium-api/src/app/bsky/feed/get_timeline.rs @@ -11,6 +11,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,6 +20,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/like.rs b/atrium-api/src/app/bsky/feed/like.rs index 54597025..bca75502 100644 --- a/atrium-api/src/app/bsky/feed/like.rs +++ b/atrium-api/src/app/bsky/feed/like.rs @@ -5,4 +5,6 @@ pub struct Record { pub created_at: crate::types::string::Datetime, pub subject: crate::com::atproto::repo::strong_ref::Main, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/feed/post.rs b/atrium-api/src/app/bsky/feed/post.rs index f60e8a5d..5367855f 100644 --- a/atrium-api/src/app/bsky/feed/post.rs +++ b/atrium-api/src/app/bsky/feed/post.rs @@ -26,6 +26,8 @@ pub struct Record { pub tags: Option>, ///The primary post content. May be an empty string, if there are embeds. pub text: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Deprecated: use facets instead. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -35,12 +37,16 @@ pub struct Entity { ///Expected values are 'mention' and 'link'. pub r#type: String, pub value: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ReplyRef { pub parent: crate::com::atproto::repo::strong_ref::Main, pub root: crate::com::atproto::repo::strong_ref::Main, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -48,6 +54,8 @@ pub struct ReplyRef { pub struct TextSlice { pub end: usize, pub start: usize, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/feed/repost.rs b/atrium-api/src/app/bsky/feed/repost.rs index d85bfaa4..043cd4cb 100644 --- a/atrium-api/src/app/bsky/feed/repost.rs +++ b/atrium-api/src/app/bsky/feed/repost.rs @@ -5,4 +5,6 @@ pub struct Record { pub created_at: crate::types::string::Datetime, pub subject: crate::com::atproto::repo::strong_ref::Main, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/feed/search_posts.rs b/atrium-api/src/app/bsky/feed/search_posts.rs index 5aa0801d..5c21a0c3 100644 --- a/atrium-api/src/app/bsky/feed/search_posts.rs +++ b/atrium-api/src/app/bsky/feed/search_posts.rs @@ -38,6 +38,8 @@ pub struct Parameters { ///Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -48,6 +50,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, pub posts: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/feed/send_interactions.rs b/atrium-api/src/app/bsky/feed/send_interactions.rs index 14f4b980..284790f5 100644 --- a/atrium-api/src/app/bsky/feed/send_interactions.rs +++ b/atrium-api/src/app/bsky/feed/send_interactions.rs @@ -5,10 +5,15 @@ pub const NSID: &str = "app.bsky.feed.sendInteractions"; #[serde(rename_all = "camelCase")] pub struct Input { pub interactions: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output {} +pub struct Output { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/threadgate.rs b/atrium-api/src/app/bsky/feed/threadgate.rs index 756301ac..ee4030d1 100644 --- a/atrium-api/src/app/bsky/feed/threadgate.rs +++ b/atrium-api/src/app/bsky/feed/threadgate.rs @@ -8,21 +8,31 @@ pub struct Record { pub created_at: crate::types::string::Datetime, ///Reference (AT-URI) to the post record. pub post: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Allow replies from actors you follow. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct FollowingRule {} +pub struct FollowingRule { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} ///Allow replies from actors on a list. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ListRule { pub list: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Allow replies from actors mentioned in your post. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MentionRule {} +pub struct MentionRule { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordAllowItem { diff --git a/atrium-api/src/app/bsky/graph/block.rs b/atrium-api/src/app/bsky/graph/block.rs index 512c34c4..4120a3d7 100644 --- a/atrium-api/src/app/bsky/graph/block.rs +++ b/atrium-api/src/app/bsky/graph/block.rs @@ -6,4 +6,6 @@ pub struct Record { pub created_at: crate::types::string::Datetime, ///DID of the account to be blocked. pub subject: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/graph/defs.rs b/atrium-api/src/app/bsky/graph/defs.rs index 47e1ecfb..d0203f2a 100644 --- a/atrium-api/src/app/bsky/graph/defs.rs +++ b/atrium-api/src/app/bsky/graph/defs.rs @@ -7,6 +7,8 @@ pub const CURATELIST: &str = "app.bsky.graph.defs#curatelist"; pub struct ListItemView { pub subject: crate::app::bsky::actor::defs::ProfileView, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type ListPurpose = String; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -28,6 +30,8 @@ pub struct ListView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -44,6 +48,8 @@ pub struct ListViewBasic { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -52,6 +58,8 @@ pub struct ListViewerState { pub blocked: Option, #[serde(skip_serializing_if = "Option::is_none")] pub muted: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///A list of actors to apply an aggregate moderation action (mute/block) on. pub const MODLIST: &str = "app.bsky.graph.defs#modlist"; @@ -61,6 +69,8 @@ pub const MODLIST: &str = "app.bsky.graph.defs#modlist"; pub struct NotFoundActor { pub actor: crate::types::string::AtIdentifier, pub not_found: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -73,4 +83,6 @@ pub struct Relationship { ///if the actor follows this DID, this is the AT-URI of the follow record #[serde(skip_serializing_if = "Option::is_none")] pub following: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/graph/follow.rs b/atrium-api/src/app/bsky/graph/follow.rs index 6becc533..1ef258e8 100644 --- a/atrium-api/src/app/bsky/graph/follow.rs +++ b/atrium-api/src/app/bsky/graph/follow.rs @@ -5,4 +5,6 @@ pub struct Record { pub created_at: crate::types::string::Datetime, pub subject: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/graph/get_blocks.rs b/atrium-api/src/app/bsky/graph/get_blocks.rs index 66c59923..9975399b 100644 --- a/atrium-api/src/app/bsky/graph/get_blocks.rs +++ b/atrium-api/src/app/bsky/graph/get_blocks.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { pub blocks: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_followers.rs b/atrium-api/src/app/bsky/graph/get_followers.rs index e78189ee..186cf8c9 100644 --- a/atrium-api/src/app/bsky/graph/get_followers.rs +++ b/atrium-api/src/app/bsky/graph/get_followers.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { pub cursor: Option, pub followers: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_follows.rs b/atrium-api/src/app/bsky/graph/get_follows.rs index 02752bcd..190bc5bd 100644 --- a/atrium-api/src/app/bsky/graph/get_follows.rs +++ b/atrium-api/src/app/bsky/graph/get_follows.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { pub cursor: Option, pub follows: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_known_followers.rs b/atrium-api/src/app/bsky/graph/get_known_followers.rs index c525e109..4b06b4e4 100644 --- a/atrium-api/src/app/bsky/graph/get_known_followers.rs +++ b/atrium-api/src/app/bsky/graph/get_known_followers.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { pub cursor: Option, pub followers: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_list.rs b/atrium-api/src/app/bsky/graph/get_list.rs index deb87e67..3cf2c973 100644 --- a/atrium-api/src/app/bsky/graph/get_list.rs +++ b/atrium-api/src/app/bsky/graph/get_list.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub limit: Option>, ///Reference (AT-URI) of the list record to hydrate. pub list: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,6 +20,8 @@ pub struct Output { pub cursor: Option, pub items: Vec, pub list: crate::app::bsky::graph::defs::ListView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_list_blocks.rs b/atrium-api/src/app/bsky/graph/get_list_blocks.rs index 2d343dbf..53b105e2 100644 --- a/atrium-api/src/app/bsky/graph/get_list_blocks.rs +++ b/atrium-api/src/app/bsky/graph/get_list_blocks.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_list_mutes.rs b/atrium-api/src/app/bsky/graph/get_list_mutes.rs index 1aed6c3b..5613b8db 100644 --- a/atrium-api/src/app/bsky/graph/get_list_mutes.rs +++ b/atrium-api/src/app/bsky/graph/get_list_mutes.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_lists.rs b/atrium-api/src/app/bsky/graph/get_lists.rs index 6a47cfe1..5d0502d5 100644 --- a/atrium-api/src/app/bsky/graph/get_lists.rs +++ b/atrium-api/src/app/bsky/graph/get_lists.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_mutes.rs b/atrium-api/src/app/bsky/graph/get_mutes.rs index e4aa7a46..24f5ef73 100644 --- a/atrium-api/src/app/bsky/graph/get_mutes.rs +++ b/atrium-api/src/app/bsky/graph/get_mutes.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub mutes: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_relationships.rs b/atrium-api/src/app/bsky/graph/get_relationships.rs index 607f04d7..eef00fcb 100644 --- a/atrium-api/src/app/bsky/graph/get_relationships.rs +++ b/atrium-api/src/app/bsky/graph/get_relationships.rs @@ -9,6 +9,8 @@ pub struct Parameters { ///List of 'other' accounts to be related back to the primary. #[serde(skip_serializing_if = "Option::is_none")] pub others: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub actor: Option, pub relationships: Vec>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs b/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs index 60a50713..fc45f02f 100644 --- a/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs +++ b/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "app.bsky.graph.getSuggestedFollowsByActor"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub actor: crate::types::string::AtIdentifier, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub suggestions: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/list.rs b/atrium-api/src/app/bsky/graph/list.rs index e5f1c731..7629971d 100644 --- a/atrium-api/src/app/bsky/graph/list.rs +++ b/atrium-api/src/app/bsky/graph/list.rs @@ -16,6 +16,8 @@ pub struct Record { pub name: String, ///Defines the purpose of the list (aka, moderation-oriented or curration-oriented) pub purpose: crate::app::bsky::graph::defs::ListPurpose, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/graph/listblock.rs b/atrium-api/src/app/bsky/graph/listblock.rs index 3adf2006..4b09934e 100644 --- a/atrium-api/src/app/bsky/graph/listblock.rs +++ b/atrium-api/src/app/bsky/graph/listblock.rs @@ -6,4 +6,6 @@ pub struct Record { pub created_at: crate::types::string::Datetime, ///Reference (AT-URI) to the mod list record. pub subject: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/graph/listitem.rs b/atrium-api/src/app/bsky/graph/listitem.rs index c7dda14b..37806c33 100644 --- a/atrium-api/src/app/bsky/graph/listitem.rs +++ b/atrium-api/src/app/bsky/graph/listitem.rs @@ -8,4 +8,6 @@ pub struct Record { pub list: String, ///The account which is included on the list. pub subject: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/graph/mute_actor.rs b/atrium-api/src/app/bsky/graph/mute_actor.rs index 60c9a429..10c69c1c 100644 --- a/atrium-api/src/app/bsky/graph/mute_actor.rs +++ b/atrium-api/src/app/bsky/graph/mute_actor.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.muteActor"; #[serde(rename_all = "camelCase")] pub struct Input { pub actor: crate::types::string::AtIdentifier, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/mute_actor_list.rs b/atrium-api/src/app/bsky/graph/mute_actor_list.rs index 4b55ebf1..6df3b73c 100644 --- a/atrium-api/src/app/bsky/graph/mute_actor_list.rs +++ b/atrium-api/src/app/bsky/graph/mute_actor_list.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.muteActorList"; #[serde(rename_all = "camelCase")] pub struct Input { pub list: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/mute_thread.rs b/atrium-api/src/app/bsky/graph/mute_thread.rs index 2ff7d900..f9dd0012 100644 --- a/atrium-api/src/app/bsky/graph/mute_thread.rs +++ b/atrium-api/src/app/bsky/graph/mute_thread.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.muteThread"; #[serde(rename_all = "camelCase")] pub struct Input { pub root: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/unmute_actor.rs b/atrium-api/src/app/bsky/graph/unmute_actor.rs index f60b1833..2d9614de 100644 --- a/atrium-api/src/app/bsky/graph/unmute_actor.rs +++ b/atrium-api/src/app/bsky/graph/unmute_actor.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.unmuteActor"; #[serde(rename_all = "camelCase")] pub struct Input { pub actor: crate::types::string::AtIdentifier, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/unmute_actor_list.rs b/atrium-api/src/app/bsky/graph/unmute_actor_list.rs index d2b1bd96..bcc75b2a 100644 --- a/atrium-api/src/app/bsky/graph/unmute_actor_list.rs +++ b/atrium-api/src/app/bsky/graph/unmute_actor_list.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.unmuteActorList"; #[serde(rename_all = "camelCase")] pub struct Input { pub list: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/graph/unmute_thread.rs b/atrium-api/src/app/bsky/graph/unmute_thread.rs index f0212d51..b7dbca93 100644 --- a/atrium-api/src/app/bsky/graph/unmute_thread.rs +++ b/atrium-api/src/app/bsky/graph/unmute_thread.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.graph.unmuteThread"; #[serde(rename_all = "camelCase")] pub struct Input { pub root: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/labeler/defs.rs b/atrium-api/src/app/bsky/labeler/defs.rs index 4d9fedb6..c1e23bda 100644 --- a/atrium-api/src/app/bsky/labeler/defs.rs +++ b/atrium-api/src/app/bsky/labeler/defs.rs @@ -10,6 +10,8 @@ pub struct LabelerPolicies { >, ///The label values which this labeler publishes. May include global or custom labels. pub label_values: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -24,6 +26,8 @@ pub struct LabelerView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -39,10 +43,14 @@ pub struct LabelerViewDetailed { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct LabelerViewerState { #[serde(skip_serializing_if = "Option::is_none")] pub like: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/labeler/get_services.rs b/atrium-api/src/app/bsky/labeler/get_services.rs index a7019651..b96460ba 100644 --- a/atrium-api/src/app/bsky/labeler/get_services.rs +++ b/atrium-api/src/app/bsky/labeler/get_services.rs @@ -7,11 +7,15 @@ pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub detailed: Option, pub dids: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub views: Vec>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/labeler/service.rs b/atrium-api/src/app/bsky/labeler/service.rs index 55f6bc6c..1d08ccf6 100644 --- a/atrium-api/src/app/bsky/labeler/service.rs +++ b/atrium-api/src/app/bsky/labeler/service.rs @@ -7,6 +7,8 @@ pub struct Record { #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, pub policies: crate::app::bsky::labeler::defs::LabelerPolicies, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/notification/get_unread_count.rs b/atrium-api/src/app/bsky/notification/get_unread_count.rs index edde6028..b0345ab9 100644 --- a/atrium-api/src/app/bsky/notification/get_unread_count.rs +++ b/atrium-api/src/app/bsky/notification/get_unread_count.rs @@ -6,11 +6,15 @@ pub const NSID: &str = "app.bsky.notification.getUnreadCount"; pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub count: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/notification/list_notifications.rs b/atrium-api/src/app/bsky/notification/list_notifications.rs index eba978ff..283d5259 100644 --- a/atrium-api/src/app/bsky/notification/list_notifications.rs +++ b/atrium-api/src/app/bsky/notification/list_notifications.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -19,6 +21,8 @@ pub struct Output { pub notifications: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -43,4 +47,6 @@ pub struct Notification { pub reason_subject: Option, pub record: crate::records::Record, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/notification/register_push.rs b/atrium-api/src/app/bsky/notification/register_push.rs index 37dc2b10..3f02a283 100644 --- a/atrium-api/src/app/bsky/notification/register_push.rs +++ b/atrium-api/src/app/bsky/notification/register_push.rs @@ -8,6 +8,8 @@ pub struct Input { pub platform: String, pub service_did: crate::types::string::Did, pub token: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/notification/update_seen.rs b/atrium-api/src/app/bsky/notification/update_seen.rs index 1da03d7f..573203c7 100644 --- a/atrium-api/src/app/bsky/notification/update_seen.rs +++ b/atrium-api/src/app/bsky/notification/update_seen.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "app.bsky.notification.updateSeen"; #[serde(rename_all = "camelCase")] pub struct Input { pub seen_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/richtext/facet.rs b/atrium-api/src/app/bsky/richtext/facet.rs index 287130fe..de1ff044 100644 --- a/atrium-api/src/app/bsky/richtext/facet.rs +++ b/atrium-api/src/app/bsky/richtext/facet.rs @@ -6,6 +6,8 @@ pub struct Main { pub features: Vec>, pub index: ByteSlice, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -13,24 +15,32 @@ pub struct Main { pub struct ByteSlice { pub byte_end: usize, pub byte_start: usize, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Link { pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Mention { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags'). #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Tag { pub tag: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/app/bsky/unspecced/defs.rs b/atrium-api/src/app/bsky/unspecced/defs.rs index 5b49e23a..8f57c63a 100644 --- a/atrium-api/src/app/bsky/unspecced/defs.rs +++ b/atrium-api/src/app/bsky/unspecced/defs.rs @@ -4,9 +4,13 @@ #[serde(rename_all = "camelCase")] pub struct SkeletonSearchActor { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct SkeletonSearchPost { pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs b/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs index 95553d7d..130f3c77 100644 --- a/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs +++ b/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub query: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs b/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs index 1fb10f95..62ea169c 100644 --- a/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs @@ -11,6 +11,8 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,6 +20,8 @@ pub struct Output { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs b/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs index 61957a71..b4b9d1e9 100644 --- a/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs +++ b/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs @@ -3,11 +3,16 @@ pub const NSID: &str = "app.bsky.unspecced.getTaggedSuggestions"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters {} +pub struct Parameters { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub suggestions: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -23,4 +28,6 @@ pub struct Suggestion { pub subject: String, pub subject_type: String, pub tag: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs b/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs index 63e73d6e..8516ceeb 100644 --- a/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs @@ -17,6 +17,8 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -27,6 +29,8 @@ pub struct Output { ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs b/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs index 06be04f2..9f6b0c9f 100644 --- a/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs @@ -41,6 +41,8 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -51,6 +53,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, pub posts: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/actor/declaration.rs b/atrium-api/src/chat/bsky/actor/declaration.rs index ab646953..f5119b5a 100644 --- a/atrium-api/src/chat/bsky/actor/declaration.rs +++ b/atrium-api/src/chat/bsky/actor/declaration.rs @@ -4,4 +4,6 @@ #[serde(rename_all = "camelCase")] pub struct Record { pub allow_incoming: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/chat/bsky/actor/defs.rs b/atrium-api/src/chat/bsky/actor/defs.rs index 95595e3c..c06467d8 100644 --- a/atrium-api/src/chat/bsky/actor/defs.rs +++ b/atrium-api/src/chat/bsky/actor/defs.rs @@ -18,4 +18,6 @@ pub struct ProfileViewBasic { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/chat/bsky/actor/delete_account.rs b/atrium-api/src/chat/bsky/actor/delete_account.rs index 5bd1b384..6c7fd6c9 100644 --- a/atrium-api/src/chat/bsky/actor/delete_account.rs +++ b/atrium-api/src/chat/bsky/actor/delete_account.rs @@ -3,7 +3,10 @@ pub const NSID: &str = "chat.bsky.actor.deleteAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output {} +pub struct Output { + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, +} #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/defs.rs b/atrium-api/src/chat/bsky/convo/defs.rs index 6f7c8376..84527037 100644 --- a/atrium-api/src/chat/bsky/convo/defs.rs +++ b/atrium-api/src/chat/bsky/convo/defs.rs @@ -10,6 +10,8 @@ pub struct ConvoView { pub muted: bool, pub rev: String, pub unread_count: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,12 +20,16 @@ pub struct DeletedMessageView { pub rev: String, pub sender: MessageViewSender, pub sent_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct LogBeginConvo { pub convo_id: String, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -31,6 +37,8 @@ pub struct LogCreateMessage { pub convo_id: String, pub message: crate::types::Union, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -38,12 +46,16 @@ pub struct LogDeleteMessage { pub convo_id: String, pub message: crate::types::Union, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct LogLeaveConvo { pub convo_id: String, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -54,6 +66,8 @@ pub struct MessageInput { #[serde(skip_serializing_if = "Option::is_none")] pub facets: Option>, pub text: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -61,6 +75,8 @@ pub struct MessageRef { pub convo_id: String, pub did: crate::types::string::Did, pub message_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -75,11 +91,15 @@ pub struct MessageView { pub sender: MessageViewSender, pub sent_at: crate::types::string::Datetime, pub text: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct MessageViewSender { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs b/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs index 4b90480b..9eeb69f3 100644 --- a/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs +++ b/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "chat.bsky.convo.deleteMessageForSelf"; pub struct Input { pub convo_id: String, pub message_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::chat::bsky::convo::defs::DeletedMessageView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/chat/bsky/convo/get_convo.rs b/atrium-api/src/chat/bsky/convo/get_convo.rs index b70654d0..d02a59b8 100644 --- a/atrium-api/src/chat/bsky/convo/get_convo.rs +++ b/atrium-api/src/chat/bsky/convo/get_convo.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "chat.bsky.convo.getConvo"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub convo_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo: crate::chat::bsky::convo::defs::ConvoView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs b/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs index a0e8457f..52290fe4 100644 --- a/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs +++ b/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "chat.bsky.convo.getConvoForMembers"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub members: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo: crate::chat::bsky::convo::defs::ConvoView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/get_log.rs b/atrium-api/src/chat/bsky/convo/get_log.rs index cc007f2e..d8b5fc1c 100644 --- a/atrium-api/src/chat/bsky/convo/get_log.rs +++ b/atrium-api/src/chat/bsky/convo/get_log.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "chat.bsky.convo.getLog"; pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -13,6 +15,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub logs: Vec>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/get_messages.rs b/atrium-api/src/chat/bsky/convo/get_messages.rs index e1003a66..160d871d 100644 --- a/atrium-api/src/chat/bsky/convo/get_messages.rs +++ b/atrium-api/src/chat/bsky/convo/get_messages.rs @@ -9,6 +9,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub messages: Vec>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/leave_convo.rs b/atrium-api/src/chat/bsky/convo/leave_convo.rs index a7f073de..809837c9 100644 --- a/atrium-api/src/chat/bsky/convo/leave_convo.rs +++ b/atrium-api/src/chat/bsky/convo/leave_convo.rs @@ -5,12 +5,16 @@ pub const NSID: &str = "chat.bsky.convo.leaveConvo"; #[serde(rename_all = "camelCase")] pub struct Input { pub convo_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo_id: String, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/list_convos.rs b/atrium-api/src/chat/bsky/convo/list_convos.rs index 0aea8d2b..0874aeb2 100644 --- a/atrium-api/src/chat/bsky/convo/list_convos.rs +++ b/atrium-api/src/chat/bsky/convo/list_convos.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { pub convos: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/mute_convo.rs b/atrium-api/src/chat/bsky/convo/mute_convo.rs index 842d03e6..a2b33fa7 100644 --- a/atrium-api/src/chat/bsky/convo/mute_convo.rs +++ b/atrium-api/src/chat/bsky/convo/mute_convo.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "chat.bsky.convo.muteConvo"; #[serde(rename_all = "camelCase")] pub struct Input { pub convo_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo: crate::chat::bsky::convo::defs::ConvoView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/send_message.rs b/atrium-api/src/chat/bsky/convo/send_message.rs index 98a4237b..4e3b9896 100644 --- a/atrium-api/src/chat/bsky/convo/send_message.rs +++ b/atrium-api/src/chat/bsky/convo/send_message.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "chat.bsky.convo.sendMessage"; pub struct Input { pub convo_id: String, pub message: crate::chat::bsky::convo::defs::MessageInput, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::chat::bsky::convo::defs::MessageView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/chat/bsky/convo/send_message_batch.rs b/atrium-api/src/chat/bsky/convo/send_message_batch.rs index 389c478c..b33571da 100644 --- a/atrium-api/src/chat/bsky/convo/send_message_batch.rs +++ b/atrium-api/src/chat/bsky/convo/send_message_batch.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "chat.bsky.convo.sendMessageBatch"; #[serde(rename_all = "camelCase")] pub struct Input { pub items: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub items: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -24,4 +28,6 @@ impl std::fmt::Display for Error { pub struct BatchItem { pub convo_id: String, pub message: crate::chat::bsky::convo::defs::MessageInput, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/chat/bsky/convo/unmute_convo.rs b/atrium-api/src/chat/bsky/convo/unmute_convo.rs index 6fa19eac..ab05a641 100644 --- a/atrium-api/src/chat/bsky/convo/unmute_convo.rs +++ b/atrium-api/src/chat/bsky/convo/unmute_convo.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "chat.bsky.convo.unmuteConvo"; #[serde(rename_all = "camelCase")] pub struct Input { pub convo_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo: crate::chat::bsky::convo::defs::ConvoView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/update_read.rs b/atrium-api/src/chat/bsky/convo/update_read.rs index e69ee90b..29a5a02a 100644 --- a/atrium-api/src/chat/bsky/convo/update_read.rs +++ b/atrium-api/src/chat/bsky/convo/update_read.rs @@ -7,11 +7,15 @@ pub struct Input { pub convo_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub message_id: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub convo: crate::chat::bsky::convo::defs::ConvoView, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs b/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs index 537fc06d..77e222f9 100644 --- a/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs +++ b/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "chat.bsky.moderation.getActorMetadata"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub actor: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -12,6 +14,8 @@ pub struct Output { pub all: Metadata, pub day: Metadata, pub month: Metadata, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -28,4 +32,6 @@ pub struct Metadata { pub convos_started: i64, pub messages_received: i64, pub messages_sent: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/chat/bsky/moderation/get_message_context.rs b/atrium-api/src/chat/bsky/moderation/get_message_context.rs index 207ff797..6fd1920f 100644 --- a/atrium-api/src/chat/bsky/moderation/get_message_context.rs +++ b/atrium-api/src/chat/bsky/moderation/get_message_context.rs @@ -12,11 +12,15 @@ pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub convo_id: Option, pub message_id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub messages: Vec>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/moderation/update_actor_access.rs b/atrium-api/src/chat/bsky/moderation/update_actor_access.rs index be373a74..d5893768 100644 --- a/atrium-api/src/chat/bsky/moderation/update_actor_access.rs +++ b/atrium-api/src/chat/bsky/moderation/update_actor_access.rs @@ -8,6 +8,8 @@ pub struct Input { pub allow_access: bool, #[serde(skip_serializing_if = "Option::is_none")] pub r#ref: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/defs.rs b/atrium-api/src/com/atproto/admin/defs.rs index 0ad2f6b5..0fd77524 100644 --- a/atrium-api/src/com/atproto/admin/defs.rs +++ b/atrium-api/src/com/atproto/admin/defs.rs @@ -22,6 +22,8 @@ pub struct AccountView { pub invites_disabled: Option, #[serde(skip_serializing_if = "Option::is_none")] pub related_records: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -30,11 +32,15 @@ pub struct RepoBlobRef { pub did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub record_uri: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct RepoRef { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -42,4 +48,6 @@ pub struct StatusAttr { pub applied: bool, #[serde(skip_serializing_if = "Option::is_none")] pub r#ref: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/admin/delete_account.rs b/atrium-api/src/com/atproto/admin/delete_account.rs index 673e06f6..ce815f06 100644 --- a/atrium-api/src/com/atproto/admin/delete_account.rs +++ b/atrium-api/src/com/atproto/admin/delete_account.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.admin.deleteAccount"; #[serde(rename_all = "camelCase")] pub struct Input { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/disable_account_invites.rs b/atrium-api/src/com/atproto/admin/disable_account_invites.rs index a37e3e19..803f0824 100644 --- a/atrium-api/src/com/atproto/admin/disable_account_invites.rs +++ b/atrium-api/src/com/atproto/admin/disable_account_invites.rs @@ -8,6 +8,8 @@ pub struct Input { ///Optional reason for disabled invites. #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/disable_invite_codes.rs b/atrium-api/src/com/atproto/admin/disable_invite_codes.rs index 58f7bd74..8a384069 100644 --- a/atrium-api/src/com/atproto/admin/disable_invite_codes.rs +++ b/atrium-api/src/com/atproto/admin/disable_invite_codes.rs @@ -8,6 +8,8 @@ pub struct Input { pub accounts: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub codes: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/enable_account_invites.rs b/atrium-api/src/com/atproto/admin/enable_account_invites.rs index 526b452e..d7691cdc 100644 --- a/atrium-api/src/com/atproto/admin/enable_account_invites.rs +++ b/atrium-api/src/com/atproto/admin/enable_account_invites.rs @@ -8,6 +8,8 @@ pub struct Input { ///Optional reason for enabled invites. #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/get_account_info.rs b/atrium-api/src/com/atproto/admin/get_account_info.rs index ec16f2ea..988b5570 100644 --- a/atrium-api/src/com/atproto/admin/get_account_info.rs +++ b/atrium-api/src/com/atproto/admin/get_account_info.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.admin.getAccountInfo"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::com::atproto::admin::defs::AccountView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/com/atproto/admin/get_account_infos.rs b/atrium-api/src/com/atproto/admin/get_account_infos.rs index b6116082..a5f42ede 100644 --- a/atrium-api/src/com/atproto/admin/get_account_infos.rs +++ b/atrium-api/src/com/atproto/admin/get_account_infos.rs @@ -5,11 +5,15 @@ pub const NSID: &str = "com.atproto.admin.getAccountInfos"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub dids: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub infos: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/get_invite_codes.rs b/atrium-api/src/com/atproto/admin/get_invite_codes.rs index 08f744e2..5da22e58 100644 --- a/atrium-api/src/com/atproto/admin/get_invite_codes.rs +++ b/atrium-api/src/com/atproto/admin/get_invite_codes.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub sort: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { pub codes: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/get_subject_status.rs b/atrium-api/src/com/atproto/admin/get_subject_status.rs index e32dd291..74b533bf 100644 --- a/atrium-api/src/com/atproto/admin/get_subject_status.rs +++ b/atrium-api/src/com/atproto/admin/get_subject_status.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub did: Option, #[serde(skip_serializing_if = "Option::is_none")] pub uri: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -19,6 +21,8 @@ pub struct Output { pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/search_accounts.rs b/atrium-api/src/com/atproto/admin/search_accounts.rs index f22ca2b6..2df856fc 100644 --- a/atrium-api/src/com/atproto/admin/search_accounts.rs +++ b/atrium-api/src/com/atproto/admin/search_accounts.rs @@ -10,6 +10,8 @@ pub struct Parameters { pub email: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -17,6 +19,8 @@ pub struct Output { pub accounts: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/send_email.rs b/atrium-api/src/com/atproto/admin/send_email.rs index 253412d5..f6d885af 100644 --- a/atrium-api/src/com/atproto/admin/send_email.rs +++ b/atrium-api/src/com/atproto/admin/send_email.rs @@ -12,11 +12,15 @@ pub struct Input { pub sender_did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub subject: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub sent: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/update_account_email.rs b/atrium-api/src/com/atproto/admin/update_account_email.rs index a70d1c81..34138fda 100644 --- a/atrium-api/src/com/atproto/admin/update_account_email.rs +++ b/atrium-api/src/com/atproto/admin/update_account_email.rs @@ -7,6 +7,8 @@ pub struct Input { ///The handle or DID of the repo. pub account: crate::types::string::AtIdentifier, pub email: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/update_account_handle.rs b/atrium-api/src/com/atproto/admin/update_account_handle.rs index 8e20e390..26a2f8bb 100644 --- a/atrium-api/src/com/atproto/admin/update_account_handle.rs +++ b/atrium-api/src/com/atproto/admin/update_account_handle.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.admin.updateAccountHandle"; pub struct Input { pub did: crate::types::string::Did, pub handle: crate::types::string::Handle, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/update_account_password.rs b/atrium-api/src/com/atproto/admin/update_account_password.rs index 81859706..88c25ca7 100644 --- a/atrium-api/src/com/atproto/admin/update_account_password.rs +++ b/atrium-api/src/com/atproto/admin/update_account_password.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.admin.updateAccountPassword"; pub struct Input { pub did: crate::types::string::Did, pub password: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/update_subject_status.rs b/atrium-api/src/com/atproto/admin/update_subject_status.rs index 6815b56e..0d6d00f4 100644 --- a/atrium-api/src/com/atproto/admin/update_subject_status.rs +++ b/atrium-api/src/com/atproto/admin/update_subject_status.rs @@ -9,6 +9,8 @@ pub struct Input { pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -16,6 +18,8 @@ pub struct Output { pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs b/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs index 8cd9cb51..74539217 100644 --- a/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs +++ b/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs @@ -13,6 +13,8 @@ pub struct Output { pub services: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_methods: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/identity/resolve_handle.rs b/atrium-api/src/com/atproto/identity/resolve_handle.rs index 6aa6785e..54c43c85 100644 --- a/atrium-api/src/com/atproto/identity/resolve_handle.rs +++ b/atrium-api/src/com/atproto/identity/resolve_handle.rs @@ -6,11 +6,15 @@ pub const NSID: &str = "com.atproto.identity.resolveHandle"; pub struct Parameters { ///The handle to resolve. pub handle: crate::types::string::Handle, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/identity/sign_plc_operation.rs b/atrium-api/src/com/atproto/identity/sign_plc_operation.rs index d789e768..a416c0a4 100644 --- a/atrium-api/src/com/atproto/identity/sign_plc_operation.rs +++ b/atrium-api/src/com/atproto/identity/sign_plc_operation.rs @@ -15,12 +15,16 @@ pub struct Input { pub token: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_methods: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { ///A signed DID PLC operation. pub operation: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/identity/submit_plc_operation.rs b/atrium-api/src/com/atproto/identity/submit_plc_operation.rs index 5d57b310..eb7a2bea 100644 --- a/atrium-api/src/com/atproto/identity/submit_plc_operation.rs +++ b/atrium-api/src/com/atproto/identity/submit_plc_operation.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.identity.submitPlcOperation"; #[serde(rename_all = "camelCase")] pub struct Input { pub operation: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/identity/update_handle.rs b/atrium-api/src/com/atproto/identity/update_handle.rs index 6d351592..727192ac 100644 --- a/atrium-api/src/com/atproto/identity/update_handle.rs +++ b/atrium-api/src/com/atproto/identity/update_handle.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.identity.updateHandle"; pub struct Input { ///The new handle. pub handle: crate::types::string::Handle, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/label/defs.rs b/atrium-api/src/com/atproto/label/defs.rs index c0bd0b3a..7be7b14f 100644 --- a/atrium-api/src/com/atproto/label/defs.rs +++ b/atrium-api/src/com/atproto/label/defs.rs @@ -29,6 +29,8 @@ pub struct Label { ///The AT Protocol version of the label object. #[serde(skip_serializing_if = "Option::is_none")] pub ver: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type LabelValue = String; ///Declares a label value and its expected interpertations and behaviors. @@ -48,6 +50,8 @@ pub struct LabelValueDefinition { pub locales: Vec, ///How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. pub severity: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Strings which describe the label in the UI, localized into a specific language. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -59,6 +63,8 @@ pub struct LabelValueDefinitionStrings { pub lang: crate::types::string::Language, ///A short human-readable name for the label. pub name: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -66,10 +72,14 @@ pub struct LabelValueDefinitionStrings { pub struct SelfLabel { ///The short string name of the value or type of this label. pub val: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Metadata tags on an atproto record, published by the author within the record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct SelfLabels { pub values: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/label/query_labels.rs b/atrium-api/src/com/atproto/label/query_labels.rs index 9485778a..18626548 100644 --- a/atrium-api/src/com/atproto/label/query_labels.rs +++ b/atrium-api/src/com/atproto/label/query_labels.rs @@ -13,6 +13,8 @@ pub struct Parameters { pub sources: Option>, ///List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. pub uri_patterns: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -20,6 +22,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub labels: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/label/subscribe_labels.rs b/atrium-api/src/com/atproto/label/subscribe_labels.rs index af9aed4f..bda073c1 100644 --- a/atrium-api/src/com/atproto/label/subscribe_labels.rs +++ b/atrium-api/src/com/atproto/label/subscribe_labels.rs @@ -7,6 +7,8 @@ pub struct Parameters { ///The last known event seq number to backfill from. #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -32,12 +34,16 @@ pub struct Info { #[serde(skip_serializing_if = "Option::is_none")] pub message: Option, pub name: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Labels { pub labels: Vec, pub seq: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/com/atproto/moderation/create_report.rs b/atrium-api/src/com/atproto/moderation/create_report.rs index e1be5a38..c412f2e8 100644 --- a/atrium-api/src/com/atproto/moderation/create_report.rs +++ b/atrium-api/src/com/atproto/moderation/create_report.rs @@ -10,6 +10,8 @@ pub struct Input { ///Indicates the broad category of violation the report is for. pub reason_type: crate::com::atproto::moderation::defs::ReasonType, pub subject: crate::types::Union, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -21,6 +23,8 @@ pub struct Output { pub reason_type: crate::com::atproto::moderation::defs::ReasonType, pub reported_by: crate::types::string::Did, pub subject: crate::types::Union, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/apply_writes.rs b/atrium-api/src/com/atproto/repo/apply_writes.rs index 79c5f9bb..546ef80a 100644 --- a/atrium-api/src/com/atproto/repo/apply_writes.rs +++ b/atrium-api/src/com/atproto/repo/apply_writes.rs @@ -13,6 +13,8 @@ pub struct Input { #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, pub writes: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -41,6 +43,8 @@ pub struct Create { #[serde(skip_serializing_if = "Option::is_none")] pub rkey: Option, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Operation which deletes an existing record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -48,6 +52,8 @@ pub struct Create { pub struct Delete { pub collection: crate::types::string::Nsid, pub rkey: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Operation which updates an existing record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -56,6 +62,8 @@ pub struct Update { pub collection: crate::types::string::Nsid, pub rkey: String, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/com/atproto/repo/create_record.rs b/atrium-api/src/com/atproto/repo/create_record.rs index 36de794b..cced42f0 100644 --- a/atrium-api/src/com/atproto/repo/create_record.rs +++ b/atrium-api/src/com/atproto/repo/create_record.rs @@ -19,12 +19,16 @@ pub struct Input { ///Can be set to 'false' to skip Lexicon schema validation of record data. #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub cid: crate::types::string::Cid, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/delete_record.rs b/atrium-api/src/com/atproto/repo/delete_record.rs index 7eafe296..e38407d2 100644 --- a/atrium-api/src/com/atproto/repo/delete_record.rs +++ b/atrium-api/src/com/atproto/repo/delete_record.rs @@ -16,6 +16,8 @@ pub struct Input { ///Compare and swap with the previous record by CID. #[serde(skip_serializing_if = "Option::is_none")] pub swap_record: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/describe_repo.rs b/atrium-api/src/com/atproto/repo/describe_repo.rs index ffb2451d..9b408fb7 100644 --- a/atrium-api/src/com/atproto/repo/describe_repo.rs +++ b/atrium-api/src/com/atproto/repo/describe_repo.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.repo.describeRepo"; pub struct Parameters { ///The handle or DID of the repo. pub repo: crate::types::string::AtIdentifier, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,6 +20,8 @@ pub struct Output { pub handle: crate::types::string::Handle, ///Indicates if handle is currently valid (resolves bi-directionally) pub handle_is_correct: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/get_record.rs b/atrium-api/src/com/atproto/repo/get_record.rs index 0565c76e..53ff4271 100644 --- a/atrium-api/src/com/atproto/repo/get_record.rs +++ b/atrium-api/src/com/atproto/repo/get_record.rs @@ -13,6 +13,8 @@ pub struct Parameters { pub repo: crate::types::string::AtIdentifier, ///The Record Key. pub rkey: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -21,6 +23,8 @@ pub struct Output { pub cid: Option, pub uri: String, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/list_missing_blobs.rs b/atrium-api/src/com/atproto/repo/list_missing_blobs.rs index bad7fcd1..1d399258 100644 --- a/atrium-api/src/com/atproto/repo/list_missing_blobs.rs +++ b/atrium-api/src/com/atproto/repo/list_missing_blobs.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { pub blobs: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -29,4 +33,6 @@ impl std::fmt::Display for Error { pub struct RecordBlob { pub cid: crate::types::string::Cid, pub record_uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/repo/list_records.rs b/atrium-api/src/com/atproto/repo/list_records.rs index f41ed437..ab0b5916 100644 --- a/atrium-api/src/com/atproto/repo/list_records.rs +++ b/atrium-api/src/com/atproto/repo/list_records.rs @@ -22,6 +22,8 @@ pub struct Parameters { ///DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) #[serde(skip_serializing_if = "Option::is_none")] pub rkey_start: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -29,6 +31,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub records: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -44,4 +48,6 @@ pub struct Record { pub cid: crate::types::string::Cid, pub uri: String, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/repo/put_record.rs b/atrium-api/src/com/atproto/repo/put_record.rs index 7d9c9060..87bca5e5 100644 --- a/atrium-api/src/com/atproto/repo/put_record.rs +++ b/atrium-api/src/com/atproto/repo/put_record.rs @@ -21,12 +21,16 @@ pub struct Input { ///Can be set to 'false' to skip Lexicon schema validation of record data. #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub cid: crate::types::string::Cid, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/repo/strong_ref.rs b/atrium-api/src/com/atproto/repo/strong_ref.rs index 5492e9ec..36627ff7 100644 --- a/atrium-api/src/com/atproto/repo/strong_ref.rs +++ b/atrium-api/src/com/atproto/repo/strong_ref.rs @@ -6,4 +6,6 @@ pub struct Main { pub cid: crate::types::string::Cid, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/repo/upload_blob.rs b/atrium-api/src/com/atproto/repo/upload_blob.rs index f27576a1..24ad78d4 100644 --- a/atrium-api/src/com/atproto/repo/upload_blob.rs +++ b/atrium-api/src/com/atproto/repo/upload_blob.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.repo.uploadBlob"; #[serde(rename_all = "camelCase")] pub struct Output { pub blob: crate::types::BlobRef, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/check_account_status.rs b/atrium-api/src/com/atproto/server/check_account_status.rs index 1f8787f7..ddbb8a2c 100644 --- a/atrium-api/src/com/atproto/server/check_account_status.rs +++ b/atrium-api/src/com/atproto/server/check_account_status.rs @@ -13,6 +13,8 @@ pub struct Output { pub repo_commit: crate::types::string::Cid, pub repo_rev: String, pub valid_did: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/confirm_email.rs b/atrium-api/src/com/atproto/server/confirm_email.rs index ba7fe78f..9bd13061 100644 --- a/atrium-api/src/com/atproto/server/confirm_email.rs +++ b/atrium-api/src/com/atproto/server/confirm_email.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.server.confirmEmail"; pub struct Input { pub email: String, pub token: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/create_account.rs b/atrium-api/src/com/atproto/server/create_account.rs index 424fa220..8849d564 100644 --- a/atrium-api/src/com/atproto/server/create_account.rs +++ b/atrium-api/src/com/atproto/server/create_account.rs @@ -26,6 +26,8 @@ pub struct Input { pub verification_code: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_phone: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Account login session returned on successful account creation. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -39,6 +41,8 @@ pub struct Output { pub did_doc: Option, pub handle: crate::types::string::Handle, pub refresh_jwt: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/create_app_password.rs b/atrium-api/src/com/atproto/server/create_app_password.rs index 97663bc4..6a36619e 100644 --- a/atrium-api/src/com/atproto/server/create_app_password.rs +++ b/atrium-api/src/com/atproto/server/create_app_password.rs @@ -9,6 +9,8 @@ pub struct Input { ///If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients. #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = AppPassword; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -37,4 +39,6 @@ pub struct AppPassword { pub password: String, #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/server/create_invite_code.rs b/atrium-api/src/com/atproto/server/create_invite_code.rs index 2e16584b..de319ddf 100644 --- a/atrium-api/src/com/atproto/server/create_invite_code.rs +++ b/atrium-api/src/com/atproto/server/create_invite_code.rs @@ -7,11 +7,15 @@ pub struct Input { #[serde(skip_serializing_if = "Option::is_none")] pub for_account: Option, pub use_count: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub code: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/create_invite_codes.rs b/atrium-api/src/com/atproto/server/create_invite_codes.rs index bbba52c1..256a943d 100644 --- a/atrium-api/src/com/atproto/server/create_invite_codes.rs +++ b/atrium-api/src/com/atproto/server/create_invite_codes.rs @@ -8,11 +8,15 @@ pub struct Input { #[serde(skip_serializing_if = "Option::is_none")] pub for_accounts: Option>, pub use_count: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub codes: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -27,4 +31,6 @@ impl std::fmt::Display for Error { pub struct AccountCodes { pub account: String, pub codes: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/server/create_session.rs b/atrium-api/src/com/atproto/server/create_session.rs index c6ff499d..e858ba17 100644 --- a/atrium-api/src/com/atproto/server/create_session.rs +++ b/atrium-api/src/com/atproto/server/create_session.rs @@ -9,6 +9,8 @@ pub struct Input { ///Handle or other identifier supported by the server for the authenticating user. pub identifier: String, pub password: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -30,6 +32,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/deactivate_account.rs b/atrium-api/src/com/atproto/server/deactivate_account.rs index af7b5a08..cc295e2c 100644 --- a/atrium-api/src/com/atproto/server/deactivate_account.rs +++ b/atrium-api/src/com/atproto/server/deactivate_account.rs @@ -7,6 +7,8 @@ pub struct Input { ///A recommendation to server as to how long they should hold onto the deactivated account before deleting. #[serde(skip_serializing_if = "Option::is_none")] pub delete_after: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/defs.rs b/atrium-api/src/com/atproto/server/defs.rs index 8bf3146e..4b9c7c96 100644 --- a/atrium-api/src/com/atproto/server/defs.rs +++ b/atrium-api/src/com/atproto/server/defs.rs @@ -10,10 +10,14 @@ pub struct InviteCode { pub disabled: bool, pub for_account: String, pub uses: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct InviteCodeUse { pub used_at: crate::types::string::Datetime, pub used_by: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/server/delete_account.rs b/atrium-api/src/com/atproto/server/delete_account.rs index eaa4e955..dae1e4bd 100644 --- a/atrium-api/src/com/atproto/server/delete_account.rs +++ b/atrium-api/src/com/atproto/server/delete_account.rs @@ -7,6 +7,8 @@ pub struct Input { pub did: crate::types::string::Did, pub password: String, pub token: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/describe_server.rs b/atrium-api/src/com/atproto/server/describe_server.rs index 4d205645..0d10cfd5 100644 --- a/atrium-api/src/com/atproto/server/describe_server.rs +++ b/atrium-api/src/com/atproto/server/describe_server.rs @@ -19,6 +19,8 @@ pub struct Output { ///If true, a phone verification token must be supplied to create an account on this instance. #[serde(skip_serializing_if = "Option::is_none")] pub phone_verification_required: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -33,6 +35,8 @@ impl std::fmt::Display for Error { pub struct Contact { #[serde(skip_serializing_if = "Option::is_none")] pub email: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -41,4 +45,6 @@ pub struct Links { pub privacy_policy: Option, #[serde(skip_serializing_if = "Option::is_none")] pub terms_of_service: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/server/get_account_invite_codes.rs b/atrium-api/src/com/atproto/server/get_account_invite_codes.rs index 0443ca84..e2f7c55a 100644 --- a/atrium-api/src/com/atproto/server/get_account_invite_codes.rs +++ b/atrium-api/src/com/atproto/server/get_account_invite_codes.rs @@ -9,11 +9,15 @@ pub struct Parameters { pub create_available: Option, #[serde(skip_serializing_if = "Option::is_none")] pub include_used: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub codes: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/get_service_auth.rs b/atrium-api/src/com/atproto/server/get_service_auth.rs index 6bcdb668..67bbf716 100644 --- a/atrium-api/src/com/atproto/server/get_service_auth.rs +++ b/atrium-api/src/com/atproto/server/get_service_auth.rs @@ -6,11 +6,15 @@ pub const NSID: &str = "com.atproto.server.getServiceAuth"; pub struct Parameters { ///The DID of the service that the token will be used to authenticate with pub aud: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub token: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/get_session.rs b/atrium-api/src/com/atproto/server/get_session.rs index 45d62788..814037b1 100644 --- a/atrium-api/src/com/atproto/server/get_session.rs +++ b/atrium-api/src/com/atproto/server/get_session.rs @@ -19,6 +19,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/list_app_passwords.rs b/atrium-api/src/com/atproto/server/list_app_passwords.rs index 7778af05..b021a35e 100644 --- a/atrium-api/src/com/atproto/server/list_app_passwords.rs +++ b/atrium-api/src/com/atproto/server/list_app_passwords.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.server.listAppPasswords"; #[serde(rename_all = "camelCase")] pub struct Output { pub passwords: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -31,4 +33,6 @@ pub struct AppPassword { pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/server/refresh_session.rs b/atrium-api/src/com/atproto/server/refresh_session.rs index c932cd25..0d4828d2 100644 --- a/atrium-api/src/com/atproto/server/refresh_session.rs +++ b/atrium-api/src/com/atproto/server/refresh_session.rs @@ -15,6 +15,8 @@ pub struct Output { ///Hosting status of the account. If not specified, then assume 'active'. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/request_email_update.rs b/atrium-api/src/com/atproto/server/request_email_update.rs index 1f569e07..ad51012b 100644 --- a/atrium-api/src/com/atproto/server/request_email_update.rs +++ b/atrium-api/src/com/atproto/server/request_email_update.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.server.requestEmailUpdate"; #[serde(rename_all = "camelCase")] pub struct Output { pub token_required: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/request_password_reset.rs b/atrium-api/src/com/atproto/server/request_password_reset.rs index 661a693b..cf3c4d74 100644 --- a/atrium-api/src/com/atproto/server/request_password_reset.rs +++ b/atrium-api/src/com/atproto/server/request_password_reset.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.server.requestPasswordReset"; #[serde(rename_all = "camelCase")] pub struct Input { pub email: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/reserve_signing_key.rs b/atrium-api/src/com/atproto/server/reserve_signing_key.rs index a24787cb..f44ffc21 100644 --- a/atrium-api/src/com/atproto/server/reserve_signing_key.rs +++ b/atrium-api/src/com/atproto/server/reserve_signing_key.rs @@ -7,12 +7,16 @@ pub struct Input { ///The DID to reserve a key for. #[serde(skip_serializing_if = "Option::is_none")] pub did: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { ///The public key for the reserved signing key, in did:key serialization. pub signing_key: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/reset_password.rs b/atrium-api/src/com/atproto/server/reset_password.rs index 6e5784d0..dcad0fa9 100644 --- a/atrium-api/src/com/atproto/server/reset_password.rs +++ b/atrium-api/src/com/atproto/server/reset_password.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.server.resetPassword"; pub struct Input { pub password: String, pub token: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/revoke_app_password.rs b/atrium-api/src/com/atproto/server/revoke_app_password.rs index 4c003a43..3cabbf1d 100644 --- a/atrium-api/src/com/atproto/server/revoke_app_password.rs +++ b/atrium-api/src/com/atproto/server/revoke_app_password.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.server.revokeAppPassword"; #[serde(rename_all = "camelCase")] pub struct Input { pub name: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/server/update_email.rs b/atrium-api/src/com/atproto/server/update_email.rs index 966b99f1..b81e6aab 100644 --- a/atrium-api/src/com/atproto/server/update_email.rs +++ b/atrium-api/src/com/atproto/server/update_email.rs @@ -10,6 +10,8 @@ pub struct Input { ///Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed. #[serde(skip_serializing_if = "Option::is_none")] pub token: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_blob.rs b/atrium-api/src/com/atproto/sync/get_blob.rs index 95cbdab1..8b26dba3 100644 --- a/atrium-api/src/com/atproto/sync/get_blob.rs +++ b/atrium-api/src/com/atproto/sync/get_blob.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cid: crate::types::string::Cid, ///The DID of the account. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_blocks.rs b/atrium-api/src/com/atproto/sync/get_blocks.rs index 3879c352..64ca1bdb 100644 --- a/atrium-api/src/com/atproto/sync/get_blocks.rs +++ b/atrium-api/src/com/atproto/sync/get_blocks.rs @@ -7,6 +7,8 @@ pub struct Parameters { pub cids: Vec, ///The DID of the repo. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_checkout.rs b/atrium-api/src/com/atproto/sync/get_checkout.rs index a15c3b00..96823612 100644 --- a/atrium-api/src/com/atproto/sync/get_checkout.rs +++ b/atrium-api/src/com/atproto/sync/get_checkout.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.sync.getCheckout"; pub struct Parameters { ///The DID of the repo. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_head.rs b/atrium-api/src/com/atproto/sync/get_head.rs index 4a575012..0df9d88b 100644 --- a/atrium-api/src/com/atproto/sync/get_head.rs +++ b/atrium-api/src/com/atproto/sync/get_head.rs @@ -6,11 +6,15 @@ pub const NSID: &str = "com.atproto.sync.getHead"; pub struct Parameters { ///The DID of the repo. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub root: crate::types::string::Cid, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_latest_commit.rs b/atrium-api/src/com/atproto/sync/get_latest_commit.rs index 746b7087..d3d392df 100644 --- a/atrium-api/src/com/atproto/sync/get_latest_commit.rs +++ b/atrium-api/src/com/atproto/sync/get_latest_commit.rs @@ -6,12 +6,16 @@ pub const NSID: &str = "com.atproto.sync.getLatestCommit"; pub struct Parameters { ///The DID of the repo. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub cid: crate::types::string::Cid, pub rev: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_record.rs b/atrium-api/src/com/atproto/sync/get_record.rs index e6b1abb2..97a6c3f9 100644 --- a/atrium-api/src/com/atproto/sync/get_record.rs +++ b/atrium-api/src/com/atproto/sync/get_record.rs @@ -12,6 +12,8 @@ pub struct Parameters { pub did: crate::types::string::Did, ///Record Key pub rkey: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_repo.rs b/atrium-api/src/com/atproto/sync/get_repo.rs index 41076d68..1edfac4a 100644 --- a/atrium-api/src/com/atproto/sync/get_repo.rs +++ b/atrium-api/src/com/atproto/sync/get_repo.rs @@ -9,6 +9,8 @@ pub struct Parameters { ///The revision ('rev') of the repo to create a diff from. #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/get_repo_status.rs b/atrium-api/src/com/atproto/sync/get_repo_status.rs index b8e2af84..68edfb23 100644 --- a/atrium-api/src/com/atproto/sync/get_repo_status.rs +++ b/atrium-api/src/com/atproto/sync/get_repo_status.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.sync.getRepoStatus"; pub struct Parameters { ///The DID of the repo. pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -18,6 +20,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/list_blobs.rs b/atrium-api/src/com/atproto/sync/list_blobs.rs index c4b887e9..5fe865c0 100644 --- a/atrium-api/src/com/atproto/sync/list_blobs.rs +++ b/atrium-api/src/com/atproto/sync/list_blobs.rs @@ -13,6 +13,8 @@ pub struct Parameters { ///Optional revision of the repo to list blobs since. #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -20,6 +22,8 @@ pub struct Output { pub cids: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/list_repos.rs b/atrium-api/src/com/atproto/sync/list_repos.rs index 87bb14a8..d3efcdaf 100644 --- a/atrium-api/src/com/atproto/sync/list_repos.rs +++ b/atrium-api/src/com/atproto/sync/list_repos.rs @@ -8,6 +8,8 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -15,6 +17,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub repos: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -36,4 +40,6 @@ pub struct Repo { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/com/atproto/sync/notify_of_update.rs b/atrium-api/src/com/atproto/sync/notify_of_update.rs index f046b12d..b23c164c 100644 --- a/atrium-api/src/com/atproto/sync/notify_of_update.rs +++ b/atrium-api/src/com/atproto/sync/notify_of_update.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.sync.notifyOfUpdate"; pub struct Input { ///Hostname of the current service (usually a PDS) that is notifying of update. pub hostname: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/request_crawl.rs b/atrium-api/src/com/atproto/sync/request_crawl.rs index bd33a06f..25ab3263 100644 --- a/atrium-api/src/com/atproto/sync/request_crawl.rs +++ b/atrium-api/src/com/atproto/sync/request_crawl.rs @@ -6,6 +6,8 @@ pub const NSID: &str = "com.atproto.sync.requestCrawl"; pub struct Input { ///Hostname of the current service (eg, PDS) that is requesting to be crawled. pub hostname: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/sync/subscribe_repos.rs b/atrium-api/src/com/atproto/sync/subscribe_repos.rs index 4d033307..746885a6 100644 --- a/atrium-api/src/com/atproto/sync/subscribe_repos.rs +++ b/atrium-api/src/com/atproto/sync/subscribe_repos.rs @@ -7,6 +7,8 @@ pub struct Parameters { ///The last known event seq number to backfill from. #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -46,6 +48,8 @@ pub struct Account { #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, pub time: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -76,6 +80,8 @@ pub struct Commit { pub time: crate::types::string::Datetime, ///Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data. pub too_big: bool, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///DEPRECATED -- Use #identity event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -85,6 +91,8 @@ pub struct Handle { pub handle: crate::types::string::Handle, pub seq: i64, pub time: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -96,6 +104,8 @@ pub struct Identity { pub handle: Option, pub seq: i64, pub time: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -103,6 +113,8 @@ pub struct Info { #[serde(skip_serializing_if = "Option::is_none")] pub message: Option, pub name: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///DEPRECATED -- Use #account event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -113,6 +125,8 @@ pub struct Migrate { pub migrate_to: Option, pub seq: i64, pub time: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///A repo operation, ie a mutation of a single record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -123,6 +137,8 @@ pub struct RepoOp { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, pub path: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///DEPRECATED -- Use #account event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -131,6 +147,8 @@ pub struct Tombstone { pub did: crate::types::string::Did, pub seq: i64, pub time: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/com/atproto/temp/check_signup_queue.rs b/atrium-api/src/com/atproto/temp/check_signup_queue.rs index 7cd8f5a8..0afcfdf1 100644 --- a/atrium-api/src/com/atproto/temp/check_signup_queue.rs +++ b/atrium-api/src/com/atproto/temp/check_signup_queue.rs @@ -9,6 +9,8 @@ pub struct Output { pub estimated_time_ms: Option, #[serde(skip_serializing_if = "Option::is_none")] pub place_in_queue: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/temp/fetch_labels.rs b/atrium-api/src/com/atproto/temp/fetch_labels.rs index 2dd2e465..21da2410 100644 --- a/atrium-api/src/com/atproto/temp/fetch_labels.rs +++ b/atrium-api/src/com/atproto/temp/fetch_labels.rs @@ -8,11 +8,15 @@ pub struct Parameters { pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Output { pub labels: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/temp/request_phone_verification.rs b/atrium-api/src/com/atproto/temp/request_phone_verification.rs index 89b54c5d..d946e853 100644 --- a/atrium-api/src/com/atproto/temp/request_phone_verification.rs +++ b/atrium-api/src/com/atproto/temp/request_phone_verification.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "com.atproto.temp.requestPhoneVerification"; #[serde(rename_all = "camelCase")] pub struct Input { pub phone_number: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/communication/create_template.rs b/atrium-api/src/tools/ozone/communication/create_template.rs index 9a85d8d4..4f515d6f 100644 --- a/atrium-api/src/tools/ozone/communication/create_template.rs +++ b/atrium-api/src/tools/ozone/communication/create_template.rs @@ -13,6 +13,8 @@ pub struct Input { pub name: String, ///Subject of the message, used in emails. pub subject: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::communication::defs::TemplateView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/communication/defs.rs b/atrium-api/src/tools/ozone/communication/defs.rs index 6a56982b..e7597a99 100644 --- a/atrium-api/src/tools/ozone/communication/defs.rs +++ b/atrium-api/src/tools/ozone/communication/defs.rs @@ -16,4 +16,6 @@ pub struct TemplateView { #[serde(skip_serializing_if = "Option::is_none")] pub subject: Option, pub updated_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/tools/ozone/communication/delete_template.rs b/atrium-api/src/tools/ozone/communication/delete_template.rs index 871577d4..157b9a10 100644 --- a/atrium-api/src/tools/ozone/communication/delete_template.rs +++ b/atrium-api/src/tools/ozone/communication/delete_template.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "tools.ozone.communication.deleteTemplate"; #[serde(rename_all = "camelCase")] pub struct Input { pub id: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/communication/list_templates.rs b/atrium-api/src/tools/ozone/communication/list_templates.rs index 62555439..28fe19a6 100644 --- a/atrium-api/src/tools/ozone/communication/list_templates.rs +++ b/atrium-api/src/tools/ozone/communication/list_templates.rs @@ -7,6 +7,8 @@ pub struct Output { pub communication_templates: Vec< crate::tools::ozone::communication::defs::TemplateView, >, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/communication/update_template.rs b/atrium-api/src/tools/ozone/communication/update_template.rs index aed5022c..732d6568 100644 --- a/atrium-api/src/tools/ozone/communication/update_template.rs +++ b/atrium-api/src/tools/ozone/communication/update_template.rs @@ -20,6 +20,8 @@ pub struct Input { ///DID of the user who is updating the template. #[serde(skip_serializing_if = "Option::is_none")] pub updated_by: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::communication::defs::TemplateView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/moderation/defs.rs b/atrium-api/src/tools/ozone/moderation/defs.rs index 18ce24b7..882f743d 100644 --- a/atrium-api/src/tools/ozone/moderation/defs.rs +++ b/atrium-api/src/tools/ozone/moderation/defs.rs @@ -11,18 +11,24 @@ pub struct BlobView { #[serde(skip_serializing_if = "Option::is_none")] pub moderation: Option, pub size: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ImageDetails { pub height: i64, pub width: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ModEventAcknowledge { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Add a comment to a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -32,6 +38,8 @@ pub struct ModEventComment { ///Make the comment persistent on the subject #[serde(skip_serializing_if = "Option::is_none")] pub sticky: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Divert a record's blobs to a 3rd party service for further scanning/tagging #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -39,6 +47,8 @@ pub struct ModEventComment { pub struct ModEventDivert { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Keep a log of outgoing email to a user #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -52,12 +62,16 @@ pub struct ModEventEmail { pub content: Option, ///The subject line of the email sent to the user. pub subject_line: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ModEventEscalate { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Apply/Negate labels on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -67,6 +81,8 @@ pub struct ModEventLabel { pub comment: Option, pub create_label_vals: Vec, pub negate_label_vals: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Mute incoming reports on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -76,6 +92,8 @@ pub struct ModEventMute { pub comment: Option, ///Indicates how long the subject should remain muted. pub duration_in_hours: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Mute incoming reports from an account #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -85,6 +103,8 @@ pub struct ModEventMuteReporter { pub comment: Option, ///Indicates how long the account should remain muted. pub duration_in_hours: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Report a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -96,6 +116,8 @@ pub struct ModEventReport { #[serde(skip_serializing_if = "Option::is_none")] pub is_reporter_muted: Option, pub report_type: crate::com::atproto::moderation::defs::ReasonType, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Resolve appeal on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -104,6 +126,8 @@ pub struct ModEventResolveAppeal { ///Describe resolution. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Revert take down action on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -112,6 +136,8 @@ pub struct ModEventReverseTakedown { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Add/Remove a tag on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -124,6 +150,8 @@ pub struct ModEventTag { pub comment: Option, ///Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated. pub remove: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Take down a subject permanently or temporarily #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -134,6 +162,8 @@ pub struct ModEventTakedown { ///Indicates how long the takedown should be in effect before automatically expiring. #[serde(skip_serializing_if = "Option::is_none")] pub duration_in_hours: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Unmute action on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -142,6 +172,8 @@ pub struct ModEventUnmute { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Unmute incoming reports from an account #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] @@ -150,6 +182,8 @@ pub struct ModEventUnmuteReporter { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -164,6 +198,8 @@ pub struct ModEventView { pub subject_blob_cids: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub subject_handle: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -174,18 +210,24 @@ pub struct ModEventViewDetail { pub id: i64, pub subject: crate::types::Union, pub subject_blobs: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Moderation { #[serde(skip_serializing_if = "Option::is_none")] pub subject_status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ModerationDetail { #[serde(skip_serializing_if = "Option::is_none")] pub subject_status: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -197,6 +239,8 @@ pub struct RecordView { pub repo: RepoView, pub uri: String, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -210,11 +254,15 @@ pub struct RecordViewDetail { pub repo: RepoView, pub uri: String, pub value: crate::records::Record, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct RecordViewNotFound { pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -234,6 +282,8 @@ pub struct RepoView { pub invites_disabled: Option, pub moderation: Moderation, pub related_records: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -259,11 +309,15 @@ pub struct RepoViewDetail { pub labels: Option>, pub moderation: ModerationDetail, pub related_records: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct RepoViewNotFound { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } ///Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed"; @@ -313,6 +367,8 @@ pub struct SubjectStatusView { pub takendown: Option, ///Timestamp referencing when the last update was made to the moderation status of the subject pub updated_at: crate::types::string::Datetime, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -320,6 +376,8 @@ pub struct VideoDetails { pub height: i64, pub length: i64, pub width: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] diff --git a/atrium-api/src/tools/ozone/moderation/emit_event.rs b/atrium-api/src/tools/ozone/moderation/emit_event.rs index ac6e17d8..a169fc63 100644 --- a/atrium-api/src/tools/ozone/moderation/emit_event.rs +++ b/atrium-api/src/tools/ozone/moderation/emit_event.rs @@ -9,6 +9,8 @@ pub struct Input { pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub subject_blob_cids: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::moderation::defs::ModEventView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/moderation/get_event.rs b/atrium-api/src/tools/ozone/moderation/get_event.rs index 32fe4ff9..eb37495b 100644 --- a/atrium-api/src/tools/ozone/moderation/get_event.rs +++ b/atrium-api/src/tools/ozone/moderation/get_event.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "tools.ozone.moderation.getEvent"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub id: i64, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::moderation::defs::ModEventViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/moderation/get_record.rs b/atrium-api/src/tools/ozone/moderation/get_record.rs index 1b6083fc..c68bf31f 100644 --- a/atrium-api/src/tools/ozone/moderation/get_record.rs +++ b/atrium-api/src/tools/ozone/moderation/get_record.rs @@ -7,6 +7,8 @@ pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, pub uri: String, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::moderation::defs::RecordViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/moderation/get_repo.rs b/atrium-api/src/tools/ozone/moderation/get_repo.rs index 0d0e6b92..d18d5636 100644 --- a/atrium-api/src/tools/ozone/moderation/get_repo.rs +++ b/atrium-api/src/tools/ozone/moderation/get_repo.rs @@ -5,6 +5,8 @@ pub const NSID: &str = "tools.ozone.moderation.getRepo"; #[serde(rename_all = "camelCase")] pub struct Parameters { pub did: crate::types::string::Did, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } pub type Output = crate::tools::ozone::moderation::defs::RepoViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] diff --git a/atrium-api/src/tools/ozone/moderation/query_events.rs b/atrium-api/src/tools/ozone/moderation/query_events.rs index 02dca69f..5fa14775 100644 --- a/atrium-api/src/tools/ozone/moderation/query_events.rs +++ b/atrium-api/src/tools/ozone/moderation/query_events.rs @@ -47,6 +47,8 @@ pub struct Parameters { ///The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent) to filter by. If not specified, all events are returned. #[serde(skip_serializing_if = "Option::is_none")] pub types: Option>, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -54,6 +56,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub events: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/query_statuses.rs b/atrium-api/src/tools/ozone/moderation/query_statuses.rs index 864e605c..f899821d 100644 --- a/atrium-api/src/tools/ozone/moderation/query_statuses.rs +++ b/atrium-api/src/tools/ozone/moderation/query_statuses.rs @@ -53,6 +53,8 @@ pub struct Parameters { ///Get subjects that were taken down #[serde(skip_serializing_if = "Option::is_none")] pub takendown: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -60,6 +62,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub subject_statuses: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/search_repos.rs b/atrium-api/src/tools/ozone/moderation/search_repos.rs index 3102ecc7..afec1c60 100644 --- a/atrium-api/src/tools/ozone/moderation/search_repos.rs +++ b/atrium-api/src/tools/ozone/moderation/search_repos.rs @@ -13,6 +13,8 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] @@ -20,6 +22,8 @@ pub struct Output { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub repos: Vec, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/server/get_config.rs b/atrium-api/src/tools/ozone/server/get_config.rs index 6f46bf7d..4f2fad24 100644 --- a/atrium-api/src/tools/ozone/server/get_config.rs +++ b/atrium-api/src/tools/ozone/server/get_config.rs @@ -14,6 +14,8 @@ pub struct Output { pub pds: Option, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -28,10 +30,14 @@ impl std::fmt::Display for Error { pub struct ServiceConfig { #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ViewerConfig { #[serde(skip_serializing_if = "Option::is_none")] pub role: Option, + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } diff --git a/atrium-api/src/types.rs b/atrium-api/src/types.rs index 57201936..cd3d2176 100644 --- a/atrium-api/src/types.rs +++ b/atrium-api/src/types.rs @@ -13,6 +13,8 @@ pub use integer::*; pub mod string; use string::RecordKey; +pub const EMPTY_EXTRA_DATA: Ipld = Ipld::Map(std::collections::BTreeMap::new()); + /// Trait for a collection of records that can be stored in a repository. /// /// The records all have the same Lexicon schema. diff --git a/atrium-cli/src/runner.rs b/atrium-cli/src/runner.rs index c6124a89..bda36e55 100644 --- a/atrium-cli/src/runner.rs +++ b/atrium-cli/src/runner.rs @@ -5,7 +5,7 @@ use atrium_api::agent::bluesky::{AtprotoServiceType, BSKY_CHAT_DID}; use atrium_api::agent::{store::SessionStore, AtpAgent}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::{AtIdentifier, Datetime, Handle}; -use atrium_api::types::LimitedNonZeroU8; +use atrium_api::types::{LimitedNonZeroU8, EMPTY_EXTRA_DATA}; use atrium_xrpc_client::reqwest::ReqwestClient; use serde::Serialize; use std::ffi::OsStr; @@ -62,6 +62,7 @@ impl Runner { algorithm: None, cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -80,6 +81,7 @@ impl Runner { cursor: None, filter: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -95,6 +97,7 @@ impl Runner { cursor: None, limit: Some(limit), uri: args.uri.to_string(), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -110,6 +113,7 @@ impl Runner { cursor: None, limit: Some(limit), uri: args.uri.to_string(), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -127,6 +131,7 @@ impl Runner { .with_context(|| "Not logged in")?, cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -141,6 +146,7 @@ impl Runner { cursor: None, feed: args.uri.to_string(), limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -155,6 +161,7 @@ impl Runner { cursor: None, limit: Some(limit), list: args.uri.to_string(), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -172,6 +179,7 @@ impl Runner { .with_context(|| "Not logged in")?, cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -189,6 +197,7 @@ impl Runner { .with_context(|| "Not logged in")?, cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -206,6 +215,7 @@ impl Runner { .with_context(|| "Not logged in")?, cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -220,6 +230,7 @@ impl Runner { cursor: None, limit: Some(limit), list: args.uri.to_string(), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -235,6 +246,7 @@ impl Runner { .actor .or(self.handle.clone().map(AtIdentifier::Handle)) .with_context(|| "Not logged in")?, + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -245,7 +257,9 @@ impl Runner { .app .bsky .actor - .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters {}) + .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters { + extra_data: EMPTY_EXTRA_DATA, + }) .await?, ), Command::ListNotifications => self.print( @@ -260,6 +274,7 @@ impl Runner { cursor: None, limit: Some(limit), seen_at: None, + extra_data: EMPTY_EXTRA_DATA, }, ) .await?, @@ -277,6 +292,7 @@ impl Runner { .list_convos(atrium_api::chat::bsky::convo::list_convos::Parameters { cursor: None, limit: Some(limit), + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), @@ -291,6 +307,7 @@ impl Runner { .resolve_handle( atrium_api::com::atproto::identity::resolve_handle::Parameters { handle: handle.clone(), + extra_data: EMPTY_EXTRA_DATA, }, ) .await? @@ -311,6 +328,7 @@ impl Runner { .get_convo_for_members( atrium_api::chat::bsky::convo::get_convo_for_members::Parameters { members: vec![did], + extra_data: EMPTY_EXTRA_DATA, }, ) .await?; @@ -324,7 +342,9 @@ impl Runner { embed: None, facets: None, text: args.text, + extra_data: EMPTY_EXTRA_DATA, }, + extra_data: EMPTY_EXTRA_DATA, }) .await?, ) @@ -352,12 +372,16 @@ impl Runner { .into(), aspect_ratio: None, image: output.blob, + extra_data: EMPTY_EXTRA_DATA, }) } } let embed = Some(atrium_api::types::Union::Refs( atrium_api::app::bsky::feed::post::RecordEmbedRefs::AppBskyEmbedImagesMain( - Box::new(atrium_api::app::bsky::embed::images::Main { images }), + Box::new(atrium_api::app::bsky::embed::images::Main { + images, + extra_data: EMPTY_EXTRA_DATA, + }), ), )); self.print( @@ -380,12 +404,14 @@ impl Runner { reply: None, tags: None, text: args.text, + extra_data: EMPTY_EXTRA_DATA, }, ))), repo: self.handle.clone().with_context(|| "Not logged in")?.into(), rkey: None, swap_commit: None, validate: None, + extra_data: EMPTY_EXTRA_DATA, }) .await?, ) @@ -403,6 +429,7 @@ impl Runner { rkey: args.uri.rkey, swap_commit: None, swap_record: None, + extra_data: EMPTY_EXTRA_DATA, }) .await?, ), diff --git a/bsky-sdk/src/agent.rs b/bsky-sdk/src/agent.rs index cc4d761e..008539d9 100644 --- a/bsky-sdk/src/agent.rs +++ b/bsky-sdk/src/agent.rs @@ -7,11 +7,11 @@ use self::config::Config; use crate::error::Result; use crate::moderation::util::interpret_label_value_definitions; use crate::moderation::{ModerationPrefsLabeler, Moderator}; -use crate::preference::Preferences; +use crate::preference::{FeedViewPreference, Preferences}; use atrium_api::agent::store::MemorySessionStore; use atrium_api::agent::{store::SessionStore, AtpAgent}; use atrium_api::app::bsky::actor::defs::{LabelersPref, PreferencesItem}; -use atrium_api::types::Union; +use atrium_api::types::{Union, EMPTY_EXTRA_DATA}; use atrium_api::xrpc::XrpcClient; #[cfg(feature = "default-client")] use atrium_xrpc_client::reqwest::ReqwestClient; @@ -78,6 +78,8 @@ where } /// Get the logged-in user's [`Preferences`]. /// + /// This implementation does not perform migration of `SavedFeedsPref` to V2. + /// /// # Arguments /// /// `enable_bsky_labeler` - If `true`, the [Bluesky's moderation labeler](atrium_api::agent::bluesky::BSKY_LABELER_DID) will be included in the moderation preferences. @@ -95,7 +97,9 @@ where .app .bsky .actor - .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters {}) + .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters { + extra_data: EMPTY_EXTRA_DATA, + }) .await? .preferences { @@ -106,6 +110,28 @@ where Union::Refs(PreferencesItem::ContentLabelPref(p)) => { label_prefs.push(p); } + Union::Refs(PreferencesItem::SavedFeedsPrefV2(p)) => { + prefs.saved_feeds = p.items; + } + Union::Refs(PreferencesItem::FeedViewPref(p)) => { + let mut pref = FeedViewPreference::default(); + if let Some(v) = p.hide_replies { + pref.hide_replies = v; + } + if let Some(v) = p.hide_replies_by_unfollowed { + pref.hide_replies_by_unfollowed = v; + } + if let Some(v) = p.hide_replies_by_like_count { + pref.hide_replies_by_like_count = v; + } + if let Some(v) = p.hide_reposts { + pref.hide_reposts = v; + } + if let Some(v) = p.hide_quote_posts { + pref.hide_quote_posts = v; + } + prefs.feed_view_prefs.insert(p.feed, pref); + } Union::Refs(PreferencesItem::MutedWordsPref(p)) => { prefs.moderation_prefs.muted_words = p.items; } @@ -184,6 +210,7 @@ where .iter() .map(|labeler| labeler.did.clone()) .collect(), + extra_data: EMPTY_EXTRA_DATA, }) .await? .views; diff --git a/bsky-sdk/src/agent/builder.rs b/bsky-sdk/src/agent/builder.rs index 67ebcf18..06532fc2 100644 --- a/bsky-sdk/src/agent/builder.rs +++ b/bsky-sdk/src/agent/builder.rs @@ -116,6 +116,7 @@ mod tests { use super::*; use async_trait::async_trait; use atrium_api::agent::Session; + use atrium_api::types::EMPTY_EXTRA_DATA; fn session() -> Session { Session { @@ -129,6 +130,7 @@ mod tests { handle: "handle.test".parse().expect("invalid handle"), refresh_jwt: String::new(), status: None, + extra_data: EMPTY_EXTRA_DATA, } } diff --git a/bsky-sdk/src/moderation/tests.rs b/bsky-sdk/src/moderation/tests.rs index 6b970446..57c07582 100644 --- a/bsky-sdk/src/moderation/tests.rs +++ b/bsky-sdk/src/moderation/tests.rs @@ -12,6 +12,7 @@ use atrium_api::app::bsky::feed::defs::PostView; use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinition}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::Datetime; +use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; const FAKE_CID: &str = "bafyreiclp443lavogvhj3d2ob2cxbfuscni2k5jk7bebjzg7khl3esabwq"; @@ -65,6 +66,7 @@ fn profile_view_basic( handle: handle.parse().expect("invalid handle"), labels, viewer: None, + extra_data: EMPTY_EXTRA_DATA, } } @@ -87,6 +89,7 @@ fn post_view(author: &ProfileViewBasic, text: &str, labels: Option>) reply: None, tags: None, text: text.into(), + extra_data: EMPTY_EXTRA_DATA, }, ))), reply_count: None, @@ -94,6 +97,7 @@ fn post_view(author: &ProfileViewBasic, text: &str, labels: Option>) threadgate: None, uri: format!("at://{}/app.bsky.feed.post/fake", author.did.as_ref()), viewer: None, + extra_data: EMPTY_EXTRA_DATA, } } @@ -108,6 +112,7 @@ fn label(src: &str, uri: &str, val: &str) -> Label { uri: uri.into(), val: val.into(), ver: None, + extra_data: EMPTY_EXTRA_DATA, } } @@ -326,6 +331,7 @@ fn prioritize_custom_labels() { blurs: String::from("none"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -375,6 +381,7 @@ fn does_not_override_imperative_labels() { blurs: String::from("none"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -430,6 +437,7 @@ fn ignore_invalid_label_value_names() { blurs: String::from("content"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -442,6 +450,7 @@ fn ignore_invalid_label_value_names() { blurs: String::from("content"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -495,6 +504,7 @@ fn custom_labels_with_default_settings() { blurs: String::from("content"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -507,6 +517,7 @@ fn custom_labels_with_default_settings() { blurs: String::from("content"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -519,6 +530,7 @@ fn custom_labels_with_default_settings() { blurs: String::from("content"), adult_only: None, locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) @@ -605,6 +617,7 @@ fn custom_labels_require_adult_content_enabled() { blurs: String::from("content"), adult_only: Some(true), locales: Vec::new(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), ) diff --git a/bsky-sdk/src/moderation/tests/behaviors.rs b/bsky-sdk/src/moderation/tests/behaviors.rs index 5f3468bb..aa3ec4b2 100644 --- a/bsky-sdk/src/moderation/tests/behaviors.rs +++ b/bsky-sdk/src/moderation/tests/behaviors.rs @@ -6,6 +6,7 @@ use crate::moderation::Moderator; use atrium_api::app::bsky::actor::defs::{ProfileViewBasic, ViewerState}; use atrium_api::app::bsky::graph::defs::{ListPurpose, ListViewBasic}; use atrium_api::types::string::Datetime; +use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; fn list_view_basic(name: &str) -> ListViewBasic { @@ -18,6 +19,7 @@ fn list_view_basic(name: &str) -> ListViewBasic { purpose: ListPurpose::from("app.bsky.graph.defs#modlist"), uri: String::from("at://did:plc:fake/app.bsky.graph.list/fake"), viewer: None, + extra_data: EMPTY_EXTRA_DATA, } } @@ -127,6 +129,7 @@ impl TestUser { } else { None }, + extra_data: EMPTY_EXTRA_DATA, } } } diff --git a/bsky-sdk/src/moderation/tests/custom_labels.rs b/bsky-sdk/src/moderation/tests/custom_labels.rs index eea49a32..4c274618 100644 --- a/bsky-sdk/src/moderation/tests/custom_labels.rs +++ b/bsky-sdk/src/moderation/tests/custom_labels.rs @@ -6,6 +6,7 @@ use crate::moderation::types::*; use crate::moderation::util::interpret_label_value_definition; use crate::moderation::Moderator; use atrium_api::com::atproto::label::defs::LabelValueDefinition; +use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; #[derive(Debug)] @@ -96,6 +97,7 @@ impl Scenario { identifier: String::from("custom"), locales: Vec::new(), severity: self.severity.as_ref().to_string(), + extra_data: EMPTY_EXTRA_DATA, }, Some("did:web:labeler.test".parse().expect("invalid did")), )?], diff --git a/bsky-sdk/src/moderation/tests/mutewords.rs b/bsky-sdk/src/moderation/tests/mutewords.rs index fda662c8..6b78cc94 100644 --- a/bsky-sdk/src/moderation/tests/mutewords.rs +++ b/bsky-sdk/src/moderation/tests/mutewords.rs @@ -2,8 +2,17 @@ use super::{post_view, profile_view_basic}; use crate::moderation::decision::DecisionContext; use crate::moderation::{ModerationPrefs, Moderator}; use atrium_api::app::bsky::actor::defs::MutedWord; +use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; +fn muted_word(target: &str, value: &str) -> MutedWord { + MutedWord { + targets: vec![String::from(target)], + value: String::from(value), + extra_data: EMPTY_EXTRA_DATA, + } +} + #[cfg(feature = "rich-text")] #[tokio::test] async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { @@ -14,10 +23,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("This is a post #inlineTag").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("tag")], - value: String::from("outlineTag"), - }], + &[muted_word("tag", "outlineTag")], &rt.text, &rt.facets, &Some(vec![String::from("outlineTag")]), @@ -28,10 +34,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("This is a post #inlineTag").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("tag")], - value: String::from("inlineTag"), - }], + &[muted_word("tag", "inlineTag")], &rt.text, &rt.facets, &Some(vec![String::from("outlineTag")]), @@ -42,10 +45,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("This is a post #inlineTag").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("inlineTag"), - }], + &[muted_word("content", "inlineTag")], &rt.text, &rt.facets, &Some(vec![String::from("outlineTag")]), @@ -56,10 +56,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("This is a post").await?; assert!(!has_muted_word( - &[MutedWord { - targets: vec![String::from("tag")], - value: String::from("post"), - }], + &[muted_word("tag", "post")], &rt.text, &rt.facets, &Some(vec![]), @@ -70,10 +67,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("改善希望です").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("希"), - }], + &[muted_word("content", "希")], &rt.text, &rt.facets, &Some(vec![]), @@ -84,10 +78,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("Idk why ☠︎ but maybe").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("☠︎"), - }], + &[muted_word("content", "☠︎")], &rt.text, &rt.facets, &Some(vec![]), @@ -98,10 +89,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("hey").await?; assert!(!has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("politics"), - }], + &[muted_word("content", "politics")], &rt.text, &rt.facets, &Some(vec![]), @@ -112,10 +100,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("javascript").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("javascript"), - }], + &[muted_word("content", "javascript")], &rt.text, &rt.facets, &Some(vec![]), @@ -126,10 +111,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("This is a post about javascript").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("javascript"), - }], + &[muted_word("content", "javascript")], &rt.text, &rt.facets, &Some(vec![]), @@ -140,10 +122,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("Use your brain, Eric").await?; assert!(!has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("ai"), - }], + &[muted_word("content", "ai")], &rt.text, &rt.facets, &Some(vec![]), @@ -154,10 +133,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("Use your\n\tbrain, Eric").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("brain"), - }], + &[muted_word("content", "brain")], &rt.text, &rt.facets, &Some(vec![]), @@ -168,10 +144,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { { let rt = rich_text_with_detect_facets("So happy :)").await?; assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from(":)"), - }], + &[muted_word("content", ":)")], &rt.text, &rt.facets, &Some(vec![]), @@ -183,10 +156,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("We're federating, yay!").await?; // match: yay! assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("yay!"), - }], + &[muted_word("content", "yay!")], &rt.text, &rt.facets, &Some(vec![]), @@ -194,10 +164,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: yay assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("yay"), - }], + &[muted_word("content", "yay")], &rt.text, &rt.facets, &Some(vec![]), @@ -209,10 +176,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("We're federating, y!ppee!!").await?; // match: y!ppee assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("y!ppee"), - }], + &[muted_word("content", "y!ppee")], &rt.text, &rt.facets, &Some(vec![]), @@ -220,10 +184,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: y!ppee! assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("y!ppee!"), - }], + &[muted_word("content", "y!ppee!")], &rt.text, &rt.facets, &Some(vec![]), @@ -235,10 +196,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Yay, Bluesky's mutewords work").await?; // match: Bluesky's assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("Bluesky's"), - }], + &[muted_word("content", "Bluesky's")], &rt.text, &rt.facets, &Some(vec![]), @@ -246,10 +204,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: Bluesky assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("Bluesky"), - }], + &[muted_word("content", "Bluesky")], &rt.text, &rt.facets, &Some(vec![]), @@ -257,10 +212,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: bluesky assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("bluesky"), - }], + &[muted_word("content", "bluesky")], &rt.text, &rt.facets, &Some(vec![]), @@ -268,10 +220,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: blueskys assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("blueskys"), - }], + &[muted_word("content", "blueskys")], &rt.text, &rt.facets, &Some(vec![]), @@ -283,10 +232,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Why so S@assy?").await?; // match: S@assy assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("S@assy"), - }], + &[muted_word("content", "S@assy")], &rt.text, &rt.facets, &Some(vec![]), @@ -294,10 +240,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: s@assy assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("s@assy"), - }], + &[muted_word("content", "s@assy")], &rt.text, &rt.facets, &Some(vec![]), @@ -309,10 +252,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("New York Times").await?; // match: new york times assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("new york times"), - }], + &[muted_word("content", "new york times")], &rt.text, &rt.facets, &Some(vec![]), @@ -324,10 +264,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Idk maybe a bot !command").await?; // match: !command assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("!command"), - }], + &[muted_word("content", "!command")], &rt.text, &rt.facets, &Some(vec![]), @@ -335,10 +272,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: command assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("command"), - }], + &[muted_word("content", "command")], &rt.text, &rt.facets, &Some(vec![]), @@ -347,10 +281,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { // no match: !command let rt = rich_text_with_detect_facets("Idk maybe a bot command").await?; assert!(!has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("!command"), - }], + &[muted_word("content", "!command")], &rt.text, &rt.facets, &Some(vec![]), @@ -362,10 +293,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("I'm e/acc pilled").await?; // match: e/acc assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("e/acc"), - }], + &[muted_word("content", "e/acc")], &rt.text, &rt.facets, &Some(vec![]), @@ -373,10 +301,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: acc assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("acc"), - }], + &[muted_word("content", "acc")], &rt.text, &rt.facets, &Some(vec![]), @@ -388,10 +313,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("I'm super-bad").await?; // match: super-bad assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("super-bad"), - }], + &[muted_word("content", "super-bad")], &rt.text, &rt.facets, &Some(vec![]), @@ -399,10 +321,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: super assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("super"), - }], + &[muted_word("content", "super")], &rt.text, &rt.facets, &Some(vec![]), @@ -410,10 +329,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: bad assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("bad"), - }], + &[muted_word("content", "bad")], &rt.text, &rt.facets, &Some(vec![]), @@ -421,10 +337,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: super bad assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("super bad"), - }], + &[muted_word("content", "super bad")], &rt.text, &rt.facets, &Some(vec![]), @@ -432,10 +345,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: superbad assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("superbad"), - }], + &[muted_word("content", "superbad")], &rt.text, &rt.facets, &Some(vec![]), @@ -447,10 +357,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Weird post with idk_what_this_would_be").await?; // match: idk what this would be assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("idk what this would be"), - }], + &[muted_word("content", "idk what this would be")], &rt.text, &rt.facets, &Some(vec![]), @@ -458,10 +365,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // no match: idk what this would be for assert!(!has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("idk what this would be for"), - }], + &[muted_word("content", "idk what this would be for")], &rt.text, &rt.facets, &Some(vec![]), @@ -469,10 +373,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: idk assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("idk"), - }], + &[muted_word("content", "idk")], &rt.text, &rt.facets, &Some(vec![]), @@ -480,10 +381,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: idkwhatthiswouldbe assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("idkwhatthiswouldbe"), - }], + &[muted_word("content", "idkwhatthiswouldbe")], &rt.text, &rt.facets, &Some(vec![]), @@ -495,10 +393,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Post with context(iykyk)").await?; // match: context(iykyk) assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("context(iykyk)"), - }], + &[muted_word("content", "context(iykyk)")], &rt.text, &rt.facets, &Some(vec![]), @@ -506,10 +401,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: context assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("context"), - }], + &[muted_word("content", "context")], &rt.text, &rt.facets, &Some(vec![]), @@ -517,10 +409,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: iykyk assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("iykyk"), - }], + &[muted_word("content", "iykyk")], &rt.text, &rt.facets, &Some(vec![]), @@ -528,10 +417,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: (iykyk) assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("(iykyk)"), - }], + &[muted_word("content", "(iykyk)")], &rt.text, &rt.facets, &Some(vec![]), @@ -543,10 +429,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("Post with 🦋").await?; // match: 🦋 assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("🦋"), - }], + &[muted_word("content", "🦋")], &rt.text, &rt.facets, &Some(vec![]), @@ -561,10 +444,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { .await?; // match: stop worrying assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("stop worrying"), - }], + &[muted_word("content", "stop worrying")], &rt.text, &rt.facets, &Some(vec![]), @@ -572,10 +452,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { )); // match: turtles, or how assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("turtles, or how"), - }], + &[muted_word("content", "turtles, or how")], &rt.text, &rt.facets, &Some(vec![]), @@ -587,10 +464,7 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { let rt = rich_text_with_detect_facets("私はカメが好きです、またはどのようにして心配するのをやめてインターネットを愛するようになったのか").await?; // match: インターネット assert!(has_muted_word( - &[MutedWord { - targets: vec![String::from("content")], - value: String::from("インターネット"), - }], + &[muted_word("content", "インターネット")], &rt.text, &rt.facets, &Some(vec![]), @@ -606,10 +480,7 @@ fn does_not_mute_own_post() { adult_content_enabled: false, labels: HashMap::new(), labelers: Vec::new(), - muted_words: vec![MutedWord { - targets: vec![String::from("content")], - value: String::from("words"), - }], + muted_words: vec![muted_word("content", "words")], hidden_posts: Vec::new(), }; let post = &post_view( @@ -651,10 +522,7 @@ async fn does_not_mute_own_tags() -> crate::error::Result<()> { adult_content_enabled: false, labels: HashMap::new(), labelers: Vec::new(), - muted_words: vec![MutedWord { - targets: vec![String::from("tag")], - value: String::from("words"), - }], + muted_words: vec![muted_word("tag", "words")], hidden_posts: Vec::new(), }; let rt = rich_text_with_detect_facets("Mute #words!").await?; diff --git a/bsky-sdk/src/moderation/tests/quoteposts.rs b/bsky-sdk/src/moderation/tests/quoteposts.rs index 0e5f49c5..d7257b93 100644 --- a/bsky-sdk/src/moderation/tests/quoteposts.rs +++ b/bsky-sdk/src/moderation/tests/quoteposts.rs @@ -11,7 +11,7 @@ use atrium_api::app::bsky::feed::defs::{PostView, PostViewEmbedRefs}; use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinition}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::Datetime; -use atrium_api::types::Union; +use atrium_api::types::{Union, EMPTY_EXTRA_DATA}; use std::collections::HashMap; fn embed_record_view( @@ -31,7 +31,9 @@ fn embed_record_view( repost_count: None, uri: format!("at://{}/app.bsky.feed.post/fake", author.did.as_ref()), value: Record::Known(KnownRecord::AppBskyFeedPost(Box::new(record.clone()))), + extra_data: EMPTY_EXTRA_DATA, }))), + extra_data: EMPTY_EXTRA_DATA, }))) } @@ -53,6 +55,7 @@ fn quoted_post(profile_labels: Option>, post_labels: Option Self { + Self { + hide_replies: false, + hide_replies_by_unfollowed: true, + hide_replies_by_like_count: 0, + hide_reposts: false, + hide_quote_posts: false, + } + } +} /// Preferences for Bluesky application. #[derive(Debug, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Preferences { + pub saved_feeds: Vec, + pub feed_view_prefs: HashMap, pub moderation_prefs: ModerationPrefs, } + +#[cfg(test)] +mod tests { + use atrium_api::app::bsky::actor::get_preferences::Output; + use serde_json::{from_str, to_string}; + + const XRPC_PREFERENCES_JSON: &str = r#"{ + "preferences": [ + { + "$type": "app.bsky.actor.defs#savedFeedsPrefV2", + "items": [ + { + "id": "3kt2b4tp6gs2a", + "pinned": true, + "type": "timeline", + "value": "following" + } + ] + }, + { + "$type": "app.bsky.actor.defs#feedViewPref", + "feed": "home", + "hideRepliesByUnfollowed": false, + "lab_mergeFeedEnabled": true + } + ] +}"#; + + #[test] + fn xrpc_preferences_json() { + let deserialized = from_str::(XRPC_PREFERENCES_JSON) + .expect("deserializing preferences should succeed"); + assert_eq!(deserialized.preferences.len(), 2); + let serialized = to_string(&deserialized).expect("serializing preferences should succeed"); + assert_eq!( + serialized.replace(char::is_whitespace, ""), + XRPC_PREFERENCES_JSON.replace(char::is_whitespace, "") + ); + } +} diff --git a/bsky-sdk/src/rich_text.rs b/bsky-sdk/src/rich_text.rs index 0ee15586..6a7c78bd 100644 --- a/bsky-sdk/src/rich_text.rs +++ b/bsky-sdk/src/rich_text.rs @@ -5,7 +5,7 @@ use crate::agent::config::Config; use crate::agent::BskyAgentBuilder; use crate::error::Result; use atrium_api::app::bsky::richtext::facet::{ByteSlice, Link, MainFeaturesItem, Mention, Tag}; -use atrium_api::types::Union; +use atrium_api::types::{Union, EMPTY_EXTRA_DATA}; use atrium_api::xrpc::XrpcClient; use detection::{detect_facets, FacetFeaturesItem}; use std::cmp::Ordering; @@ -71,6 +71,7 @@ impl RichText { const BYTE_SLICE_ZERO: ByteSlice = ByteSlice { byte_start: 0, byte_end: 0, + extra_data: EMPTY_EXTRA_DATA, }; /// Create a new [`RichText`] with the given text and optional facets. pub fn new( @@ -237,10 +238,14 @@ impl RichText { let did = agent.api.com.atproto.identity.resolve_handle( atrium_api::com::atproto::identity::resolve_handle::Parameters { handle: mention.handle.parse().expect("invalid handle"), + extra_data: EMPTY_EXTRA_DATA, } ).await?.did; features.push(Union::Refs(MainFeaturesItem::Mention(Box::new( - Mention { did }, + Mention { + did, + extra_data: EMPTY_EXTRA_DATA, + }, )))); } FacetFeaturesItem::Link(link) => { @@ -254,6 +259,7 @@ impl RichText { facets.push(atrium_api::app::bsky::richtext::facet::Main { features, index: facet_without_resolution.index, + extra_data: EMPTY_EXTRA_DATA, }); } Some(facets) diff --git a/bsky-sdk/src/rich_text/detection.rs b/bsky-sdk/src/rich_text/detection.rs index 479d7603..adbd3dec 100644 --- a/bsky-sdk/src/rich_text/detection.rs +++ b/bsky-sdk/src/rich_text/detection.rs @@ -1,4 +1,5 @@ use atrium_api::app::bsky::richtext::facet::{ByteSlice, Link, Tag}; +use atrium_api::types::EMPTY_EXTRA_DATA; use psl; use regex::Regex; use std::sync::OnceLock; @@ -46,6 +47,7 @@ pub fn detect_facets(text: &str) -> Vec { index: ByteSlice { byte_end: m.end(), byte_start: m.start() - 1, + extra_data: EMPTY_EXTRA_DATA, }, }); } @@ -73,6 +75,7 @@ pub fn detect_facets(text: &str) -> Vec { let mut index = ByteSlice { byte_end: m.end(), byte_start: m.start(), + extra_data: EMPTY_EXTRA_DATA, }; // strip ending puncuation if (RE_ENDING_PUNCTUATION @@ -84,7 +87,10 @@ pub fn detect_facets(text: &str) -> Vec { index.byte_end -= 1; } facets.push(FacetWithoutResolution { - features: vec![FacetFeaturesItem::Link(Box::new(Link { uri }))], + features: vec![FacetFeaturesItem::Link(Box::new(Link { + uri, + extra_data: EMPTY_EXTRA_DATA, + }))], index, }); } @@ -114,9 +120,13 @@ pub fn detect_facets(text: &str) -> Vec { let index = ByteSlice { byte_end: leading.end() + tag.len(), byte_start: leading.start(), + extra_data: EMPTY_EXTRA_DATA, }; facets.push(FacetWithoutResolution { - features: vec![FacetFeaturesItem::Tag(Box::new(Tag { tag: tag.into() }))], + features: vec![FacetFeaturesItem::Tag(Box::new(Tag { + tag: tag.into(), + extra_data: EMPTY_EXTRA_DATA, + }))], index, }); } diff --git a/bsky-sdk/src/rich_text/tests.rs b/bsky-sdk/src/rich_text/tests.rs index eb410d28..9865dafe 100644 --- a/bsky-sdk/src/rich_text/tests.rs +++ b/bsky-sdk/src/rich_text/tests.rs @@ -4,7 +4,7 @@ use crate::error::Result; use crate::rich_text::{RichText, RichTextSegment}; use crate::tests::MockClient; use atrium_api::app::bsky::richtext::facet::{ByteSlice, Link, Main, MainFeaturesItem, Mention}; -use atrium_api::types::{Union, UnknownData}; +use atrium_api::types::{Union, UnknownData, EMPTY_EXTRA_DATA}; use ipld_core::ipld::Ipld; pub async fn rich_text_with_detect_facets(text: &str) -> Result { @@ -29,7 +29,9 @@ fn facet(byte_start: usize, byte_end: usize) -> Main { index: ByteSlice { byte_end, byte_start, + extra_data: EMPTY_EXTRA_DATA, }, + extra_data: EMPTY_EXTRA_DATA, } } @@ -432,20 +434,26 @@ fn segments() { Main { features: vec![Union::Refs(MainFeaturesItem::Mention(Box::new(Mention { did: "did:plc:123".parse().expect("invalid did"), + extra_data: EMPTY_EXTRA_DATA, })))], index: ByteSlice { byte_end: 3, byte_start: 0, + extra_data: EMPTY_EXTRA_DATA, }, + extra_data: EMPTY_EXTRA_DATA, }, Main { features: vec![Union::Refs(MainFeaturesItem::Link(Box::new(Link { uri: String::from("https://example.com"), + extra_data: EMPTY_EXTRA_DATA, })))], index: ByteSlice { byte_end: 7, byte_start: 4, + extra_data: EMPTY_EXTRA_DATA, }, + extra_data: EMPTY_EXTRA_DATA, }, facet(8, 13), ]), diff --git a/lexicon/atrium-codegen/src/token_stream.rs b/lexicon/atrium-codegen/src/token_stream.rs index 358bd0d4..f4e9007c 100644 --- a/lexicon/atrium-codegen/src/token_stream.rs +++ b/lexicon/atrium-codegen/src/token_stream.rs @@ -289,6 +289,8 @@ fn lex_object(object: &LexObject, name: &str) -> Result { #[serde(rename_all = "camelCase")] pub struct #struct_name { #(#fields)* + #[serde(flatten)] + pub extra_data: ipld_core::ipld::Ipld, } }) } From 0053b0c7a5c051114a0aa3c05ade011510afa956 Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 14:21:15 +0900 Subject: [PATCH 3/9] Add Object for object types --- atrium-api/src/agent.rs | 221 +++++----- atrium-api/src/agent/inner.rs | 12 +- atrium-api/src/app/bsky/actor/defs.rs | 105 ++--- .../src/app/bsky/actor/get_preferences.rs | 11 +- atrium-api/src/app/bsky/actor/get_profile.rs | 5 +- atrium-api/src/app/bsky/actor/get_profiles.rs | 10 +- .../src/app/bsky/actor/get_suggestions.rs | 10 +- atrium-api/src/app/bsky/actor/profile.rs | 5 +- .../src/app/bsky/actor/put_preferences.rs | 5 +- .../src/app/bsky/actor/search_actors.rs | 10 +- .../app/bsky/actor/search_actors_typeahead.rs | 10 +- atrium-api/src/app/bsky/embed/external.rs | 20 +- atrium-api/src/app/bsky/embed/images.rs | 25 +- atrium-api/src/app/bsky/embed/record.rs | 25 +- .../src/app/bsky/embed/record_with_media.rs | 10 +- atrium-api/src/app/bsky/feed/defs.rs | 75 ++-- .../app/bsky/feed/describe_feed_generator.rs | 15 +- atrium-api/src/app/bsky/feed/generator.rs | 5 +- .../src/app/bsky/feed/get_actor_feeds.rs | 10 +- .../src/app/bsky/feed/get_actor_likes.rs | 10 +- .../src/app/bsky/feed/get_author_feed.rs | 10 +- atrium-api/src/app/bsky/feed/get_feed.rs | 10 +- .../src/app/bsky/feed/get_feed_generator.rs | 10 +- .../src/app/bsky/feed/get_feed_generators.rs | 10 +- .../src/app/bsky/feed/get_feed_skeleton.rs | 10 +- atrium-api/src/app/bsky/feed/get_likes.rs | 15 +- atrium-api/src/app/bsky/feed/get_list_feed.rs | 10 +- .../src/app/bsky/feed/get_post_thread.rs | 10 +- atrium-api/src/app/bsky/feed/get_posts.rs | 10 +- .../src/app/bsky/feed/get_reposted_by.rs | 10 +- .../src/app/bsky/feed/get_suggested_feeds.rs | 10 +- atrium-api/src/app/bsky/feed/get_timeline.rs | 10 +- atrium-api/src/app/bsky/feed/like.rs | 5 +- atrium-api/src/app/bsky/feed/post.rs | 20 +- atrium-api/src/app/bsky/feed/repost.rs | 5 +- atrium-api/src/app/bsky/feed/search_posts.rs | 10 +- .../src/app/bsky/feed/send_interactions.rs | 11 +- atrium-api/src/app/bsky/feed/threadgate.rs | 22 +- atrium-api/src/app/bsky/graph/block.rs | 5 +- atrium-api/src/app/bsky/graph/defs.rs | 30 +- atrium-api/src/app/bsky/graph/follow.rs | 5 +- atrium-api/src/app/bsky/graph/get_blocks.rs | 10 +- .../src/app/bsky/graph/get_followers.rs | 10 +- atrium-api/src/app/bsky/graph/get_follows.rs | 10 +- .../src/app/bsky/graph/get_known_followers.rs | 10 +- atrium-api/src/app/bsky/graph/get_list.rs | 10 +- .../src/app/bsky/graph/get_list_blocks.rs | 10 +- .../src/app/bsky/graph/get_list_mutes.rs | 10 +- atrium-api/src/app/bsky/graph/get_lists.rs | 10 +- atrium-api/src/app/bsky/graph/get_mutes.rs | 10 +- .../src/app/bsky/graph/get_relationships.rs | 10 +- .../graph/get_suggested_follows_by_actor.rs | 10 +- atrium-api/src/app/bsky/graph/list.rs | 5 +- atrium-api/src/app/bsky/graph/listblock.rs | 5 +- atrium-api/src/app/bsky/graph/listitem.rs | 5 +- atrium-api/src/app/bsky/graph/mute_actor.rs | 5 +- .../src/app/bsky/graph/mute_actor_list.rs | 5 +- atrium-api/src/app/bsky/graph/mute_thread.rs | 5 +- atrium-api/src/app/bsky/graph/unmute_actor.rs | 5 +- .../src/app/bsky/graph/unmute_actor_list.rs | 5 +- .../src/app/bsky/graph/unmute_thread.rs | 5 +- atrium-api/src/app/bsky/labeler/defs.rs | 20 +- .../src/app/bsky/labeler/get_services.rs | 10 +- atrium-api/src/app/bsky/labeler/service.rs | 5 +- .../app/bsky/notification/get_unread_count.rs | 10 +- .../bsky/notification/list_notifications.rs | 15 +- .../app/bsky/notification/register_push.rs | 5 +- .../src/app/bsky/notification/update_seen.rs | 5 +- atrium-api/src/app/bsky/richtext/facet.rs | 25 +- atrium-api/src/app/bsky/unspecced/defs.rs | 10 +- .../unspecced/get_popular_feed_generators.rs | 10 +- .../unspecced/get_suggestions_skeleton.rs | 10 +- .../bsky/unspecced/get_tagged_suggestions.rs | 16 +- .../bsky/unspecced/search_actors_skeleton.rs | 10 +- .../bsky/unspecced/search_posts_skeleton.rs | 10 +- atrium-api/src/chat/bsky/actor/declaration.rs | 5 +- atrium-api/src/chat/bsky/actor/defs.rs | 5 +- .../src/chat/bsky/actor/delete_account.rs | 6 +- atrium-api/src/chat/bsky/convo/defs.rs | 50 +-- .../bsky/convo/delete_message_for_self.rs | 5 +- atrium-api/src/chat/bsky/convo/get_convo.rs | 10 +- .../chat/bsky/convo/get_convo_for_members.rs | 10 +- atrium-api/src/chat/bsky/convo/get_log.rs | 10 +- .../src/chat/bsky/convo/get_messages.rs | 10 +- atrium-api/src/chat/bsky/convo/leave_convo.rs | 10 +- atrium-api/src/chat/bsky/convo/list_convos.rs | 10 +- atrium-api/src/chat/bsky/convo/mute_convo.rs | 10 +- .../src/chat/bsky/convo/send_message.rs | 5 +- .../src/chat/bsky/convo/send_message_batch.rs | 15 +- .../src/chat/bsky/convo/unmute_convo.rs | 10 +- atrium-api/src/chat/bsky/convo/update_read.rs | 10 +- .../bsky/moderation/get_actor_metadata.rs | 15 +- .../bsky/moderation/get_message_context.rs | 10 +- .../bsky/moderation/update_actor_access.rs | 5 +- atrium-api/src/com/atproto/admin/defs.rs | 20 +- .../src/com/atproto/admin/delete_account.rs | 5 +- .../atproto/admin/disable_account_invites.rs | 5 +- .../com/atproto/admin/disable_invite_codes.rs | 5 +- .../atproto/admin/enable_account_invites.rs | 5 +- .../src/com/atproto/admin/get_account_info.rs | 5 +- .../com/atproto/admin/get_account_infos.rs | 10 +- .../src/com/atproto/admin/get_invite_codes.rs | 10 +- .../com/atproto/admin/get_subject_status.rs | 10 +- .../src/com/atproto/admin/search_accounts.rs | 10 +- .../src/com/atproto/admin/send_email.rs | 10 +- .../com/atproto/admin/update_account_email.rs | 5 +- .../atproto/admin/update_account_handle.rs | 5 +- .../atproto/admin/update_account_password.rs | 5 +- .../atproto/admin/update_subject_status.rs | 10 +- .../get_recommended_did_credentials.rs | 5 +- .../com/atproto/identity/resolve_handle.rs | 10 +- .../atproto/identity/sign_plc_operation.rs | 10 +- .../atproto/identity/submit_plc_operation.rs | 5 +- .../src/com/atproto/identity/update_handle.rs | 5 +- atrium-api/src/com/atproto/label/defs.rs | 27 +- .../src/com/atproto/label/query_labels.rs | 10 +- .../src/com/atproto/label/subscribe_labels.rs | 15 +- .../com/atproto/moderation/create_report.rs | 10 +- .../src/com/atproto/repo/apply_writes.rs | 20 +- .../src/com/atproto/repo/create_record.rs | 10 +- .../src/com/atproto/repo/delete_record.rs | 5 +- .../src/com/atproto/repo/describe_repo.rs | 10 +- atrium-api/src/com/atproto/repo/get_record.rs | 10 +- .../com/atproto/repo/list_missing_blobs.rs | 15 +- .../src/com/atproto/repo/list_records.rs | 15 +- atrium-api/src/com/atproto/repo/put_record.rs | 10 +- atrium-api/src/com/atproto/repo/strong_ref.rs | 5 +- .../src/com/atproto/repo/upload_blob.rs | 5 +- .../atproto/server/check_account_status.rs | 5 +- .../src/com/atproto/server/confirm_email.rs | 5 +- .../src/com/atproto/server/create_account.rs | 10 +- .../com/atproto/server/create_app_password.rs | 10 +- .../com/atproto/server/create_invite_code.rs | 10 +- .../com/atproto/server/create_invite_codes.rs | 15 +- .../src/com/atproto/server/create_session.rs | 10 +- .../com/atproto/server/deactivate_account.rs | 5 +- atrium-api/src/com/atproto/server/defs.rs | 10 +- .../src/com/atproto/server/delete_account.rs | 5 +- .../src/com/atproto/server/describe_server.rs | 15 +- .../server/get_account_invite_codes.rs | 10 +- .../com/atproto/server/get_service_auth.rs | 10 +- .../src/com/atproto/server/get_session.rs | 5 +- .../com/atproto/server/list_app_passwords.rs | 10 +- .../src/com/atproto/server/refresh_session.rs | 5 +- .../atproto/server/request_email_update.rs | 5 +- .../atproto/server/request_password_reset.rs | 5 +- .../com/atproto/server/reserve_signing_key.rs | 10 +- .../src/com/atproto/server/reset_password.rs | 5 +- .../com/atproto/server/revoke_app_password.rs | 5 +- .../src/com/atproto/server/update_email.rs | 5 +- atrium-api/src/com/atproto/sync/get_blob.rs | 5 +- atrium-api/src/com/atproto/sync/get_blocks.rs | 5 +- .../src/com/atproto/sync/get_checkout.rs | 5 +- atrium-api/src/com/atproto/sync/get_head.rs | 10 +- .../src/com/atproto/sync/get_latest_commit.rs | 10 +- atrium-api/src/com/atproto/sync/get_record.rs | 5 +- atrium-api/src/com/atproto/sync/get_repo.rs | 5 +- .../src/com/atproto/sync/get_repo_status.rs | 10 +- atrium-api/src/com/atproto/sync/list_blobs.rs | 10 +- atrium-api/src/com/atproto/sync/list_repos.rs | 15 +- .../src/com/atproto/sync/notify_of_update.rs | 5 +- .../src/com/atproto/sync/request_crawl.rs | 5 +- .../src/com/atproto/sync/subscribe_repos.rs | 45 +-- .../com/atproto/temp/check_signup_queue.rs | 5 +- .../src/com/atproto/temp/fetch_labels.rs | 10 +- .../temp/request_phone_verification.rs | 5 +- .../ozone/communication/create_template.rs | 5 +- .../src/tools/ozone/communication/defs.rs | 5 +- .../ozone/communication/delete_template.rs | 5 +- .../ozone/communication/list_templates.rs | 5 +- .../ozone/communication/update_template.rs | 5 +- atrium-api/src/tools/ozone/moderation/defs.rs | 145 +++---- .../src/tools/ozone/moderation/emit_event.rs | 5 +- .../src/tools/ozone/moderation/get_event.rs | 5 +- .../src/tools/ozone/moderation/get_record.rs | 5 +- .../src/tools/ozone/moderation/get_repo.rs | 5 +- .../tools/ozone/moderation/query_events.rs | 10 +- .../tools/ozone/moderation/query_statuses.rs | 10 +- .../tools/ozone/moderation/search_repos.rs | 10 +- .../src/tools/ozone/server/get_config.rs | 15 +- atrium-api/src/types.rs | 39 +- atrium-cli/src/runner.rs | 381 ++++++++++-------- bsky-sdk/src/agent.rs | 70 ++-- bsky-sdk/src/agent/builder.rs | 11 +- bsky-sdk/src/moderation/tests.rs | 73 ++-- bsky-sdk/src/moderation/tests/behaviors.rs | 13 +- .../src/moderation/tests/custom_labels.rs | 9 +- bsky-sdk/src/moderation/tests/mutewords.rs | 7 +- bsky-sdk/src/moderation/tests/quoteposts.rs | 54 +-- bsky-sdk/src/rich_text.rs | 35 +- bsky-sdk/src/rich_text/detection.rs | 34 +- bsky-sdk/src/rich_text/tests.rs | 60 +-- lexicon/atrium-codegen/src/token_stream.rs | 7 +- 193 files changed, 1359 insertions(+), 1685 deletions(-) diff --git a/atrium-api/src/agent.rs b/atrium-api/src/agent.rs index 38eaf46f..93000fb1 100644 --- a/atrium-api/src/agent.rs +++ b/atrium-api/src/agent.rs @@ -7,7 +7,6 @@ pub mod store; use self::store::SessionStore; use crate::client::Service; use crate::types::string::Did; -use crate::types::EMPTY_EXTRA_DATA; use atrium_xrpc::error::Error; use atrium_xrpc::XrpcClient; use std::sync::Arc; @@ -68,12 +67,14 @@ where .com .atproto .server - .create_session(crate::com::atproto::server::create_session::Input { - auth_factor_token: None, - identifier: identifier.as_ref().into(), - password: password.as_ref().into(), - extra_data: EMPTY_EXTRA_DATA, - }) + .create_session( + crate::com::atproto::server::create_session::InputData { + auth_factor_token: None, + identifier: identifier.as_ref().into(), + password: password.as_ref().into(), + } + .into(), + ) .await?; self.store.set_session(result.clone()).await; if let Some(did_doc) = &result.did_doc { @@ -93,9 +94,9 @@ where assert_eq!(output.did, session.did); if let Some(mut session) = self.store.get_session().await { session.did_doc = output.did_doc.clone(); - session.email = output.email; + session.email = output.email.clone(); session.email_confirmed = output.email_confirmed; - session.handle = output.handle; + session.handle = output.handle.clone(); self.store.set_session(session).await; } if let Some(did_doc) = &output.did_doc { @@ -153,6 +154,7 @@ where mod tests { use super::*; use crate::agent::store::MemorySessionStore; + use crate::com::atproto::server::create_session::OutputData; use crate::did_doc::{DidDocument, Service, VerificationMethod}; use async_trait::async_trait; use atrium_xrpc::HttpClient; @@ -164,8 +166,8 @@ mod tests { #[derive(Default)] struct MockResponses { - create_session: Option, - get_session: Option, + create_session: Option, + get_session: Option, } #[derive(Default)] @@ -220,7 +222,7 @@ mod tests { crate::com::atproto::server::refresh_session::NSID => { if token == Some("refresh") { body.extend(serde_json::to_vec( - &crate::com::atproto::server::refresh_session::Output { + &crate::com::atproto::server::refresh_session::OutputData { access_jwt: String::from("access"), active: None, did: "did:web:example.com".parse().expect("valid"), @@ -228,21 +230,19 @@ mod tests { handle: "example.com".parse().expect("valid"), refresh_jwt: String::from("refresh"), status: None, - extra_data: EMPTY_EXTRA_DATA, }, )?); } } crate::com::atproto::server::describe_server::NSID => { body.extend(serde_json::to_vec( - &crate::com::atproto::server::describe_server::Output { + &crate::com::atproto::server::describe_server::OutputData { available_user_domains: Vec::new(), contact: None, did: "did:web:example.com".parse().expect("valid"), invite_code_required: None, links: None, phone_verification_required: None, - extra_data: EMPTY_EXTRA_DATA, }, )?); } @@ -270,8 +270,8 @@ mod tests { } } - fn session() -> Session { - Session { + fn session_data() -> OutputData { + OutputData { access_jwt: String::from("access"), active: None, did: "did:web:example.com".parse().expect("valid"), @@ -282,7 +282,6 @@ mod tests { handle: "example.com".parse().expect("valid"), refresh_jwt: String::from("refresh"), status: None, - extra_data: EMPTY_EXTRA_DATA, } } @@ -296,13 +295,13 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_login() { - let session = session(); + let session_data = session_data(); // success { let client = MockClient { responses: MockResponses { - create_session: Some(crate::com::atproto::server::create_session::Output { - ..session.clone() + create_session: Some(crate::com::atproto::server::create_session::OutputData { + ..session_data.clone() }), ..Default::default() }, @@ -313,7 +312,7 @@ mod tests { .login("test", "pass") .await .expect("login should be succeeded"); - assert_eq!(agent.get_session().await, Some(session)); + assert_eq!(agent.get_session().await, Some(session_data.into())); } // failure with `createSession` error { @@ -335,26 +334,28 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_xrpc_get_session() { - let session = session(); + let session_data = session_data(); let client = MockClient { responses: MockResponses { - get_session: Some(crate::com::atproto::server::get_session::Output { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - extra_data: EMPTY_EXTRA_DATA, - }), + get_session: Some( + crate::com::atproto::server::get_session::OutputData { + active: session_data.active.clone(), + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + } + .into(), + ), ..Default::default() }, ..Default::default() }; let agent = AtpAgent::new(client, MemorySessionStore::default()); - agent.store.set_session(session).await; + agent.store.set_session(session_data.into()).await; let output = agent .api .com @@ -369,27 +370,29 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_xrpc_get_session_with_refresh() { - let mut session = session(); + let mut session = session_data(); session.access_jwt = String::from("expired"); let client = MockClient { responses: MockResponses { - get_session: Some(crate::com::atproto::server::get_session::Output { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - extra_data: EMPTY_EXTRA_DATA, - }), + get_session: Some( + crate::com::atproto::server::get_session::OutputData { + active: session.active.clone(), + did: session.did.clone(), + did_doc: session.did_doc.clone(), + email: session.email.clone(), + email_auth_factor: session.email_auth_factor, + email_confirmed: session.email_confirmed, + handle: session.handle.clone(), + status: session.status.clone(), + } + .into(), + ), ..Default::default() }, ..Default::default() }; let agent = AtpAgent::new(client, MemorySessionStore::default()); - agent.store.set_session(session).await; + agent.store.set_session(session.into()).await; let output = agent .api .com @@ -404,7 +407,7 @@ mod tests { .store .get_session() .await - .map(|session| session.access_jwt), + .map(|session| session.access_jwt.clone()), Some("access".into()) ); } @@ -412,28 +415,30 @@ mod tests { #[cfg(not(target_arch = "wasm32"))] #[tokio::test] async fn test_xrpc_get_session_with_duplicated_refresh() { - let mut session = session(); + let mut session = session_data(); session.access_jwt = String::from("expired"); let client = MockClient { responses: MockResponses { - get_session: Some(crate::com::atproto::server::get_session::Output { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - extra_data: EMPTY_EXTRA_DATA, - }), + get_session: Some( + crate::com::atproto::server::get_session::OutputData { + active: session.active.clone(), + did: session.did.clone(), + did_doc: session.did_doc.clone(), + email: session.email.clone(), + email_auth_factor: session.email_auth_factor, + email_confirmed: session.email_confirmed, + handle: session.handle.clone(), + status: session.status.clone(), + } + .into(), + ), ..Default::default() }, ..Default::default() }; let counts = Arc::clone(&client.counts); let agent = Arc::new(AtpAgent::new(client, MemorySessionStore::default())); - agent.store.set_session(session).await; + agent.store.set_session(session.into()).await; let handles = (0..3).map(|_| { let agent = Arc::clone(&agent); tokio::spawn(async move { agent.api.com.atproto.server.get_session().await }) @@ -452,7 +457,7 @@ mod tests { .store .get_session() .await - .map(|session| session.access_jwt), + .map(|session| session.access_jwt.clone()), Some("access".into()) ); assert_eq!( @@ -467,22 +472,24 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_resume_session() { - let session = session(); + let session_data = session_data(); // success { let client = MockClient { responses: MockResponses { - get_session: Some(crate::com::atproto::server::get_session::Output { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - extra_data: EMPTY_EXTRA_DATA, - }), + get_session: Some( + crate::com::atproto::server::get_session::OutputData { + active: session_data.active.clone(), + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + } + .into(), + ), ..Default::default() }, ..Default::default() @@ -490,13 +497,16 @@ mod tests { let agent = AtpAgent::new(client, MemorySessionStore::default()); assert_eq!(agent.get_session().await, None); agent - .resume_session(Session { - email: Some(String::from("test@example.com")), - ..session.clone() - }) + .resume_session( + OutputData { + email: Some(String::from("test@example.com")), + ..session_data.clone() + } + .into(), + ) .await .expect("resume_session should be succeeded"); - assert_eq!(agent.get_session().await, Some(session.clone())); + assert_eq!(agent.get_session().await, Some(session_data.clone().into())); } // failure with `getSession` error { @@ -509,7 +519,7 @@ mod tests { let agent = AtpAgent::new(client, MemorySessionStore::default()); assert_eq!(agent.get_session().await, None); agent - .resume_session(session) + .resume_session(session_data.clone().into()) .await .expect_err("resume_session should be failed"); assert_eq!(agent.get_session().await, None); @@ -519,39 +529,44 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_resume_session_with_refresh() { - let session = session(); + let session_data = session_data(); let client = MockClient { responses: MockResponses { - get_session: Some(crate::com::atproto::server::get_session::Output { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - extra_data: EMPTY_EXTRA_DATA, - }), + get_session: Some( + crate::com::atproto::server::get_session::OutputData { + active: session_data.active.clone(), + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + } + .into(), + ), ..Default::default() }, ..Default::default() }; let agent = AtpAgent::new(client, MemorySessionStore::default()); agent - .resume_session(Session { - access_jwt: "expired".into(), - ..session.clone() - }) + .resume_session( + OutputData { + access_jwt: "expired".into(), + ..session_data.clone() + } + .into(), + ) .await .expect("resume_session should be succeeded"); - assert_eq!(agent.get_session().await, Some(session)); + assert_eq!(agent.get_session().await, Some(session_data.into())); } #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_login_with_diddoc() { - let session = session(); + let session_data = session_data(); let did_doc = DidDocument { id: "did:plc:ewvi7nxzyoun6zhxrhs64oiz".into(), also_known_as: Some(vec!["at://atproto.com".into()]), @@ -573,9 +588,9 @@ mod tests { { let client = MockClient { responses: MockResponses { - create_session: Some(crate::com::atproto::server::create_session::Output { + create_session: Some(crate::com::atproto::server::create_session::OutputData { did_doc: Some(did_doc.clone()), - ..session.clone() + ..session_data.clone() }), ..Default::default() }, @@ -596,7 +611,7 @@ mod tests { { let client = MockClient { responses: MockResponses { - create_session: Some(crate::com::atproto::server::create_session::Output { + create_session: Some(crate::com::atproto::server::create_session::OutputData { did_doc: Some(DidDocument { service: Some(vec![ Service { @@ -612,7 +627,7 @@ mod tests { ]), ..did_doc.clone() }), - ..session.clone() + ..session_data.clone() }), ..Default::default() }, diff --git a/atrium-api/src/agent/inner.rs b/atrium-api/src/agent/inner.rs index 8b8869f5..cd6c81ce 100644 --- a/atrium-api/src/agent/inner.rs +++ b/atrium-api/src/agent/inner.rs @@ -86,9 +86,9 @@ where async fn authentication_token(&self, is_refresh: bool) -> Option { self.store.get_session().await.map(|session| { if is_refresh { - session.refresh_jwt + session.refresh_jwt.clone() } else { - session.access_jwt + session.access_jwt.clone() } }) } @@ -178,11 +178,11 @@ where async fn refresh_session_inner(&self) { if let Ok(output) = self.call_refresh_session().await { if let Some(mut session) = self.store.get_session().await { - session.access_jwt = output.access_jwt; - session.did = output.did; + session.access_jwt = output.access_jwt.clone(); + session.did = output.did.clone(); session.did_doc = output.did_doc.clone(); - session.handle = output.handle; - session.refresh_jwt = output.refresh_jwt; + session.handle = output.handle.clone(); + session.refresh_jwt = output.refresh_jwt.clone(); self.store.set_session(session).await; } if let Some(did_doc) = &output.did_doc { diff --git a/atrium-api/src/app/bsky/actor/defs.rs b/atrium-api/src/app/bsky/actor/defs.rs index 0c6206e5..d2d25324 100644 --- a/atrium-api/src/app/bsky/actor/defs.rs +++ b/atrium-api/src/app/bsky/actor/defs.rs @@ -2,25 +2,23 @@ //!Definitions for the `app.bsky.actor.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AdultContentPref { +pub struct AdultContentPrefData { pub enabled: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AdultContentPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ContentLabelPref { +pub struct ContentLabelPrefData { pub label: String, ///Which labeler does this preference apply to? If undefined, applies globally. #[serde(skip_serializing_if = "Option::is_none")] pub labeler_did: Option, pub visibility: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ContentLabelPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct FeedViewPref { +pub struct FeedViewPrefData { ///The URI of the feed, or an identifier which describes the feed. pub feed: String, ///Hide quote posts in the feed. @@ -38,81 +36,72 @@ pub struct FeedViewPref { ///Hide reposts in the feed. #[serde(skip_serializing_if = "Option::is_none")] pub hide_reposts: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type FeedViewPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct HiddenPostsPref { +pub struct HiddenPostsPrefData { ///A list of URIs of posts the account owner has hidden. pub items: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type HiddenPostsPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct InterestsPref { +pub struct InterestsPrefData { ///A list of tags which describe the account owner's interests gathered during onboarding. pub tags: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type InterestsPref = crate::types::Object; ///The subject's followers whom you also follow #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct KnownFollowers { +pub struct KnownFollowersData { pub count: i64, pub followers: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type KnownFollowers = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelerPrefItem { +pub struct LabelerPrefItemData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelerPrefItem = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelersPref { +pub struct LabelersPrefData { pub labelers: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelersPref = crate::types::Object; ///A word that the account owner has muted. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MutedWord { +pub struct MutedWordData { ///The intended targets of the muted word. pub targets: Vec, ///The muted word itself. pub value: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MutedWord = crate::types::Object; pub type MutedWordTarget = String; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MutedWordsPref { +pub struct MutedWordsPrefData { ///A list of words the account owner has muted. pub items: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MutedWordsPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct PersonalDetailsPref { +pub struct PersonalDetailsPrefData { ///The birth date of account owner. #[serde(skip_serializing_if = "Option::is_none")] pub birth_date: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type PersonalDetailsPref = crate::types::Object; pub type Preferences = Vec>; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileAssociated { +pub struct ProfileAssociatedData { #[serde(skip_serializing_if = "Option::is_none")] pub chat: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -121,19 +110,17 @@ pub struct ProfileAssociated { pub labeler: Option, #[serde(skip_serializing_if = "Option::is_none")] pub lists: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileAssociated = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileAssociatedChat { +pub struct ProfileAssociatedChatData { pub allow_incoming: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileAssociatedChat = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileView { +pub struct ProfileViewData { #[serde(skip_serializing_if = "Option::is_none")] pub associated: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -150,12 +137,11 @@ pub struct ProfileView { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileViewBasic { +pub struct ProfileViewBasicData { #[serde(skip_serializing_if = "Option::is_none")] pub associated: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -168,12 +154,11 @@ pub struct ProfileViewBasic { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileViewBasic = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileViewDetailed { +pub struct ProfileViewDetailedData { #[serde(skip_serializing_if = "Option::is_none")] pub associated: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -198,52 +183,47 @@ pub struct ProfileViewDetailed { pub posts_count: Option, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileViewDetailed = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SavedFeed { +pub struct SavedFeedData { pub id: String, pub pinned: bool, pub r#type: String, pub value: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SavedFeed = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SavedFeedsPref { +pub struct SavedFeedsPrefData { pub pinned: Vec, pub saved: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub timeline_index: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SavedFeedsPref = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SavedFeedsPrefV2 { +pub struct SavedFeedsPrefV2Data { pub items: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SavedFeedsPrefV2 = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ThreadViewPref { +pub struct ThreadViewPrefData { ///Show followed users at the top of all replies. #[serde(skip_serializing_if = "Option::is_none")] pub prioritize_followed_users: Option, ///Sorting mode for threads. #[serde(skip_serializing_if = "Option::is_none")] pub sort: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ThreadViewPref = crate::types::Object; ///Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewerState { +pub struct ViewerStateData { #[serde(skip_serializing_if = "Option::is_none")] pub blocked_by: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -260,9 +240,8 @@ pub struct ViewerState { pub muted: Option, #[serde(skip_serializing_if = "Option::is_none")] pub muted_by_list: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewerState = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum PreferencesItem { diff --git a/atrium-api/src/app/bsky/actor/get_preferences.rs b/atrium-api/src/app/bsky/actor/get_preferences.rs index 98adfed6..ad2d354b 100644 --- a/atrium-api/src/app/bsky/actor/get_preferences.rs +++ b/atrium-api/src/app/bsky/actor/get_preferences.rs @@ -3,17 +3,14 @@ pub const NSID: &str = "app.bsky.actor.getPreferences"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct ParametersData {} +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub preferences: crate::app::bsky::actor::defs::Preferences, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/actor/get_profile.rs b/atrium-api/src/app/bsky/actor/get_profile.rs index 51c6133d..bb123f61 100644 --- a/atrium-api/src/app/bsky/actor/get_profile.rs +++ b/atrium-api/src/app/bsky/actor/get_profile.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "app.bsky.actor.getProfile"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Handle or DID of account to fetch profile of. pub actor: crate::types::string::AtIdentifier, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; pub type Output = crate::app::bsky::actor::defs::ProfileViewDetailed; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/app/bsky/actor/get_profiles.rs b/atrium-api/src/app/bsky/actor/get_profiles.rs index 6d0c4760..0ecfcc01 100644 --- a/atrium-api/src/app/bsky/actor/get_profiles.rs +++ b/atrium-api/src/app/bsky/actor/get_profiles.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "app.bsky.actor.getProfiles"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actors: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub profiles: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/actor/get_suggestions.rs b/atrium-api/src/app/bsky/actor/get_suggestions.rs index a5de9e06..d17c5065 100644 --- a/atrium-api/src/app/bsky/actor/get_suggestions.rs +++ b/atrium-api/src/app/bsky/actor/get_suggestions.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.actor.getSuggestions"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/actor/profile.rs b/atrium-api/src/app/bsky/actor/profile.rs index f253a410..538fd942 100644 --- a/atrium-api/src/app/bsky/actor/profile.rs +++ b/atrium-api/src/app/bsky/actor/profile.rs @@ -2,7 +2,7 @@ //!Definitions for the `app.bsky.actor.profile` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { ///Small image to be displayed next to posts from account. AKA, 'profile picture' #[serde(skip_serializing_if = "Option::is_none")] pub avatar: Option, @@ -17,9 +17,8 @@ pub struct Record { ///Self-label values, specific to the Bluesky application, on the overall account. #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordLabelsRefs { diff --git a/atrium-api/src/app/bsky/actor/put_preferences.rs b/atrium-api/src/app/bsky/actor/put_preferences.rs index 3d91e93f..92d2f70b 100644 --- a/atrium-api/src/app/bsky/actor/put_preferences.rs +++ b/atrium-api/src/app/bsky/actor/put_preferences.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.actor.putPreferences"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub preferences: crate::app::bsky::actor::defs::Preferences, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/actor/search_actors.rs b/atrium-api/src/app/bsky/actor/search_actors.rs index b1f88ba4..93cb69be 100644 --- a/atrium-api/src/app/bsky/actor/search_actors.rs +++ b/atrium-api/src/app/bsky/actor/search_actors.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.actor.searchActors"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -14,18 +14,16 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead. #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs b/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs index bec3d87a..37b37d4a 100644 --- a/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs +++ b/atrium-api/src/app/bsky/actor/search_actors_typeahead.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.actor.searchActorsTypeahead"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, ///Search query prefix; not a full query string. @@ -12,16 +12,14 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead. #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub actors: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/embed/external.rs b/atrium-api/src/app/bsky/embed/external.rs index 026aac99..b59cd018 100644 --- a/atrium-api/src/app/bsky/embed/external.rs +++ b/atrium-api/src/app/bsky/embed/external.rs @@ -3,37 +3,33 @@ ///A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub external: External, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct External { +pub struct ExternalData { pub description: String, #[serde(skip_serializing_if = "Option::is_none")] pub thumb: Option, pub title: String, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type External = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct View { +pub struct ViewData { pub external: ViewExternal, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type View = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewExternal { +pub struct ViewExternalData { pub description: String, #[serde(skip_serializing_if = "Option::is_none")] pub thumb: Option, pub title: String, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewExternal = crate::types::Object; diff --git a/atrium-api/src/app/bsky/embed/images.rs b/atrium-api/src/app/bsky/embed/images.rs index 38618176..52aefc49 100644 --- a/atrium-api/src/app/bsky/embed/images.rs +++ b/atrium-api/src/app/bsky/embed/images.rs @@ -3,41 +3,37 @@ //!A set of images embedded in a Bluesky record (eg, a post). #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub images: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; ///width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AspectRatio { +pub struct AspectRatioData { pub height: core::num::NonZeroU64, pub width: core::num::NonZeroU64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AspectRatio = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Image { +pub struct ImageData { ///Alt text description of the image, for accessibility. pub alt: String, #[serde(skip_serializing_if = "Option::is_none")] pub aspect_ratio: Option, pub image: crate::types::BlobRef, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Image = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct View { +pub struct ViewData { pub images: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type View = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewImage { +pub struct ViewImageData { ///Alt text description of the image, for accessibility. pub alt: String, #[serde(skip_serializing_if = "Option::is_none")] @@ -46,6 +42,5 @@ pub struct ViewImage { pub fullsize: String, ///Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. pub thumb: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewImage = crate::types::Object; diff --git a/atrium-api/src/app/bsky/embed/record.rs b/atrium-api/src/app/bsky/embed/record.rs index 0b2789d3..73224947 100644 --- a/atrium-api/src/app/bsky/embed/record.rs +++ b/atrium-api/src/app/bsky/embed/record.rs @@ -3,38 +3,34 @@ //!A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub record: crate::com::atproto::repo::strong_ref::Main, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct View { +pub struct ViewData { pub record: crate::types::Union, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type View = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewBlocked { +pub struct ViewBlockedData { pub author: crate::app::bsky::feed::defs::BlockedAuthor, pub blocked: bool, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewBlocked = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewNotFound { +pub struct ViewNotFoundData { pub not_found: bool, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewNotFound = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewRecord { +pub struct ViewRecordData { pub author: crate::app::bsky::actor::defs::ProfileViewBasic, pub cid: crate::types::string::Cid, #[serde(skip_serializing_if = "Option::is_none")] @@ -51,9 +47,8 @@ pub struct ViewRecord { pub uri: String, ///The record data itself. pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewRecord = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum ViewRecordEmbedsItem { diff --git a/atrium-api/src/app/bsky/embed/record_with_media.rs b/atrium-api/src/app/bsky/embed/record_with_media.rs index eeb89a31..8f363b68 100644 --- a/atrium-api/src/app/bsky/embed/record_with_media.rs +++ b/atrium-api/src/app/bsky/embed/record_with_media.rs @@ -3,20 +3,18 @@ //!A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub media: crate::types::Union, pub record: crate::app::bsky::embed::record::Main, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct View { +pub struct ViewData { pub media: crate::types::Union, pub record: crate::app::bsky::embed::record::View, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type View = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum MainMediaRefs { diff --git a/atrium-api/src/app/bsky/feed/defs.rs b/atrium-api/src/app/bsky/feed/defs.rs index e76bfc3a..d737e709 100644 --- a/atrium-api/src/app/bsky/feed/defs.rs +++ b/atrium-api/src/app/bsky/feed/defs.rs @@ -2,22 +2,20 @@ //!Definitions for the `app.bsky.feed.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct BlockedAuthor { +pub struct BlockedAuthorData { pub did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type BlockedAuthor = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct BlockedPost { +pub struct BlockedPostData { pub author: BlockedAuthor, pub blocked: bool, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type BlockedPost = crate::types::Object; ///User clicked through to the author of the feed item pub const CLICKTHROUGH_AUTHOR: &str = "app.bsky.feed.defs#clickthroughAuthor"; ///User clicked through to the embedded content of the feed item @@ -28,7 +26,7 @@ pub const CLICKTHROUGH_ITEM: &str = "app.bsky.feed.defs#clickthroughItem"; pub const CLICKTHROUGH_REPOSTER: &str = "app.bsky.feed.defs#clickthroughReposter"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct FeedViewPost { +pub struct FeedViewPostData { ///Context provided by feed generator that may be passed back alongside interactions. #[serde(skip_serializing_if = "Option::is_none")] pub feed_context: Option, @@ -37,12 +35,11 @@ pub struct FeedViewPost { pub reason: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub reply: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type FeedViewPost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct GeneratorView { +pub struct GeneratorViewData { #[serde(skip_serializing_if = "Option::is_none")] pub accepts_interactions: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -63,20 +60,18 @@ pub struct GeneratorView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type GeneratorView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct GeneratorViewerState { +pub struct GeneratorViewerStateData { #[serde(skip_serializing_if = "Option::is_none")] pub like: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type GeneratorViewerState = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Interaction { +pub struct InteractionData { #[serde(skip_serializing_if = "Option::is_none")] pub event: Option, ///Context on a feed item that was orginally supplied by the feed generator on getFeedSkeleton. @@ -84,9 +79,8 @@ pub struct Interaction { pub feed_context: Option, #[serde(skip_serializing_if = "Option::is_none")] pub item: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Interaction = crate::types::Object; ///User liked the feed item pub const INTERACTION_LIKE: &str = "app.bsky.feed.defs#interactionLike"; ///User quoted the feed item @@ -101,15 +95,14 @@ pub const INTERACTION_SEEN: &str = "app.bsky.feed.defs#interactionSeen"; pub const INTERACTION_SHARE: &str = "app.bsky.feed.defs#interactionShare"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct NotFoundPost { +pub struct NotFoundPostData { pub not_found: bool, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type NotFoundPost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct PostView { +pub struct PostViewData { pub author: crate::app::bsky::actor::defs::ProfileViewBasic, pub cid: crate::types::string::Cid, #[serde(skip_serializing_if = "Option::is_none")] @@ -129,65 +122,59 @@ pub struct PostView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type PostView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ReasonRepost { +pub struct ReasonRepostData { pub by: crate::app::bsky::actor::defs::ProfileViewBasic, pub indexed_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ReasonRepost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ReplyRef { +pub struct ReplyRefData { ///When parent is a reply to another post, this is the author of that post. #[serde(skip_serializing_if = "Option::is_none")] pub grandparent_author: Option, pub parent: crate::types::Union, pub root: crate::types::Union, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ReplyRef = crate::types::Object; ///Request that less content like the given feed item be shown in the feed pub const REQUEST_LESS: &str = "app.bsky.feed.defs#requestLess"; ///Request that more content like the given feed item be shown in the feed pub const REQUEST_MORE: &str = "app.bsky.feed.defs#requestMore"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SkeletonFeedPost { +pub struct SkeletonFeedPostData { ///Context that will be passed through to client and may be passed to feed generator back alongside interactions. #[serde(skip_serializing_if = "Option::is_none")] pub feed_context: Option, pub post: String, #[serde(skip_serializing_if = "Option::is_none")] pub reason: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SkeletonFeedPost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SkeletonReasonRepost { +pub struct SkeletonReasonRepostData { pub repost: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SkeletonReasonRepost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ThreadViewPost { +pub struct ThreadViewPostData { #[serde(skip_serializing_if = "Option::is_none")] pub parent: Option>, pub post: PostView, #[serde(skip_serializing_if = "Option::is_none")] pub replies: Option>>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ThreadViewPost = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ThreadgateView { +pub struct ThreadgateViewData { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -196,13 +183,12 @@ pub struct ThreadgateView { pub record: Option, #[serde(skip_serializing_if = "Option::is_none")] pub uri: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ThreadgateView = crate::types::Object; ///Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewerState { +pub struct ViewerStateData { #[serde(skip_serializing_if = "Option::is_none")] pub like: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -211,9 +197,8 @@ pub struct ViewerState { pub repost: Option, #[serde(skip_serializing_if = "Option::is_none")] pub thread_muted: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewerState = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum FeedViewPostReasonRefs { diff --git a/atrium-api/src/app/bsky/feed/describe_feed_generator.rs b/atrium-api/src/app/bsky/feed/describe_feed_generator.rs index 4e45534e..f3b33c8b 100644 --- a/atrium-api/src/app/bsky/feed/describe_feed_generator.rs +++ b/atrium-api/src/app/bsky/feed/describe_feed_generator.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "app.bsky.feed.describeFeedGenerator"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub did: crate::types::string::Did, pub feeds: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub links: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -21,18 +20,16 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Feed { +pub struct FeedData { pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Feed = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Links { +pub struct LinksData { #[serde(skip_serializing_if = "Option::is_none")] pub privacy_policy: Option, #[serde(skip_serializing_if = "Option::is_none")] pub terms_of_service: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Links = crate::types::Object; diff --git a/atrium-api/src/app/bsky/feed/generator.rs b/atrium-api/src/app/bsky/feed/generator.rs index 5de7600e..7afc571d 100644 --- a/atrium-api/src/app/bsky/feed/generator.rs +++ b/atrium-api/src/app/bsky/feed/generator.rs @@ -2,7 +2,7 @@ //!Definitions for the `app.bsky.feed.generator` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { ///Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions #[serde(skip_serializing_if = "Option::is_none")] pub accepts_interactions: Option, @@ -18,9 +18,8 @@ pub struct Record { ///Self-label values #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordLabelsRefs { diff --git a/atrium-api/src/app/bsky/feed/get_actor_feeds.rs b/atrium-api/src/app/bsky/feed/get_actor_feeds.rs index b68faba9..8c710576 100644 --- a/atrium-api/src/app/bsky/feed/get_actor_feeds.rs +++ b/atrium-api/src/app/bsky/feed/get_actor_feeds.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "app.bsky.feed.getActorFeeds"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_actor_likes.rs b/atrium-api/src/app/bsky/feed/get_actor_likes.rs index 3e5acde6..0d88ec77 100644 --- a/atrium-api/src/app/bsky/feed/get_actor_likes.rs +++ b/atrium-api/src/app/bsky/feed/get_actor_likes.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "app.bsky.feed.getActorLikes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_author_feed.rs b/atrium-api/src/app/bsky/feed/get_author_feed.rs index 5ba3b7c7..e6bc4b1a 100644 --- a/atrium-api/src/app/bsky/feed/get_author_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_author_feed.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.getAuthorFeed"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, @@ -12,18 +12,16 @@ pub struct Parameters { pub filter: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_feed.rs b/atrium-api/src/app/bsky/feed/get_feed.rs index fe00f07b..7e586de8 100644 --- a/atrium-api/src/app/bsky/feed/get_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_feed.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "app.bsky.feed.getFeed"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: String, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_feed_generator.rs b/atrium-api/src/app/bsky/feed/get_feed_generator.rs index 151a3aaa..7a111a82 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_generator.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_generator.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.feed.getFeedGenerator"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///AT-URI of the feed generator record. pub feed: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { ///Indicates whether the feed generator service has been online recently, or else seems to be inactive. pub is_online: bool, ///Indicates whether the feed generator service is compatible with the record declaration. pub is_valid: bool, pub view: crate::app::bsky::feed::defs::GeneratorView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_feed_generators.rs b/atrium-api/src/app/bsky/feed/get_feed_generators.rs index 825aa86a..977b93ea 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_generators.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_generators.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "app.bsky.feed.getFeedGenerators"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub feeds: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub feeds: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs b/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs index e5edfb69..eef28c2f 100644 --- a/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs +++ b/atrium-api/src/app/bsky/feed/get_feed_skeleton.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.feed.getFeedSkeleton"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, ///Reference to feed generator record describing the specific feed being requested. pub feed: String, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_likes.rs b/atrium-api/src/app/bsky/feed/get_likes.rs index ff426fd5..b6d0998d 100644 --- a/atrium-api/src/app/bsky/feed/get_likes.rs +++ b/atrium-api/src/app/bsky/feed/get_likes.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.getLikes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///CID of the subject record (aka, specific version of record), to filter likes. #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, @@ -13,21 +13,19 @@ pub struct Parameters { pub limit: Option>, ///AT-URI of the subject (eg, a post record). pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub likes: Vec, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -38,10 +36,9 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Like { +pub struct LikeData { pub actor: crate::app::bsky::actor::defs::ProfileView, pub created_at: crate::types::string::Datetime, pub indexed_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Like = crate::types::Object; diff --git a/atrium-api/src/app/bsky/feed/get_list_feed.rs b/atrium-api/src/app/bsky/feed/get_list_feed.rs index 5a878edb..8fa01276 100644 --- a/atrium-api/src/app/bsky/feed/get_list_feed.rs +++ b/atrium-api/src/app/bsky/feed/get_list_feed.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.feed.getListFeed"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, ///Reference (AT-URI) to the list record. pub list: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_post_thread.rs b/atrium-api/src/app/bsky/feed/get_post_thread.rs index 5d4a1050..5cd466f0 100644 --- a/atrium-api/src/app/bsky/feed/get_post_thread.rs +++ b/atrium-api/src/app/bsky/feed/get_post_thread.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.getPostThread"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///How many levels of reply depth should be included in response. #[serde(skip_serializing_if = "Option::is_none")] pub depth: Option>, @@ -12,16 +12,14 @@ pub struct Parameters { pub parent_height: Option>, ///Reference (AT-URI) to post record. pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub thread: crate::types::Union, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/get_posts.rs b/atrium-api/src/app/bsky/feed/get_posts.rs index d7eec601..5b3f3561 100644 --- a/atrium-api/src/app/bsky/feed/get_posts.rs +++ b/atrium-api/src/app/bsky/feed/get_posts.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "app.bsky.feed.getPosts"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///List of post AT-URIs to return hydrated views for. pub uris: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub posts: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_reposted_by.rs b/atrium-api/src/app/bsky/feed/get_reposted_by.rs index a00c83b5..8fbb6f56 100644 --- a/atrium-api/src/app/bsky/feed/get_reposted_by.rs +++ b/atrium-api/src/app/bsky/feed/get_reposted_by.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.getRepostedBy"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///If supplied, filters to reposts of specific version (by CID) of the post record. #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, @@ -13,21 +13,19 @@ pub struct Parameters { pub limit: Option>, ///Reference (AT-URI) of post record pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub reposted_by: Vec, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs b/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs index 14993c71..5d304842 100644 --- a/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs +++ b/atrium-api/src/app/bsky/feed/get_suggested_feeds.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.feed.getSuggestedFeeds"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/get_timeline.rs b/atrium-api/src/app/bsky/feed/get_timeline.rs index 58db219b..60f4947b 100644 --- a/atrium-api/src/app/bsky/feed/get_timeline.rs +++ b/atrium-api/src/app/bsky/feed/get_timeline.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.getTimeline"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. #[serde(skip_serializing_if = "Option::is_none")] pub algorithm: Option, @@ -11,18 +11,16 @@ pub struct Parameters { pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feed: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/like.rs b/atrium-api/src/app/bsky/feed/like.rs index bca75502..20603865 100644 --- a/atrium-api/src/app/bsky/feed/like.rs +++ b/atrium-api/src/app/bsky/feed/like.rs @@ -2,9 +2,8 @@ //!Definitions for the `app.bsky.feed.like` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, pub subject: crate::com::atproto::repo::strong_ref::Main, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/feed/post.rs b/atrium-api/src/app/bsky/feed/post.rs index 5367855f..602ecb1f 100644 --- a/atrium-api/src/app/bsky/feed/post.rs +++ b/atrium-api/src/app/bsky/feed/post.rs @@ -2,7 +2,7 @@ //!Definitions for the `app.bsky.feed.post` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { ///Client-declared timestamp when this post was originally created. pub created_at: crate::types::string::Datetime, #[serde(skip_serializing_if = "Option::is_none")] @@ -26,37 +26,33 @@ pub struct Record { pub tags: Option>, ///The primary post content. May be an empty string, if there are embeds. pub text: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; ///Deprecated: use facets instead. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Entity { +pub struct EntityData { pub index: TextSlice, ///Expected values are 'mention' and 'link'. pub r#type: String, pub value: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Entity = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ReplyRef { +pub struct ReplyRefData { pub parent: crate::com::atproto::repo::strong_ref::Main, pub root: crate::com::atproto::repo::strong_ref::Main, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ReplyRef = crate::types::Object; ///Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct TextSlice { +pub struct TextSliceData { pub end: usize, pub start: usize, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type TextSlice = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordEmbedRefs { diff --git a/atrium-api/src/app/bsky/feed/repost.rs b/atrium-api/src/app/bsky/feed/repost.rs index 043cd4cb..0c865df1 100644 --- a/atrium-api/src/app/bsky/feed/repost.rs +++ b/atrium-api/src/app/bsky/feed/repost.rs @@ -2,9 +2,8 @@ //!Definitions for the `app.bsky.feed.repost` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, pub subject: crate::com::atproto::repo::strong_ref::Main, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/feed/search_posts.rs b/atrium-api/src/app/bsky/feed/search_posts.rs index 5c21a0c3..33cf427b 100644 --- a/atrium-api/src/app/bsky/feed/search_posts.rs +++ b/atrium-api/src/app/bsky/feed/search_posts.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.feed.searchPosts"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Filter to posts by the given account. Handles are resolved to DID before query-time. #[serde(skip_serializing_if = "Option::is_none")] pub author: Option, @@ -38,21 +38,19 @@ pub struct Parameters { ///Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, pub posts: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/feed/send_interactions.rs b/atrium-api/src/app/bsky/feed/send_interactions.rs index 284790f5..a8e48ae4 100644 --- a/atrium-api/src/app/bsky/feed/send_interactions.rs +++ b/atrium-api/src/app/bsky/feed/send_interactions.rs @@ -3,17 +3,14 @@ pub const NSID: &str = "app.bsky.feed.sendInteractions"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub interactions: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct OutputData {} +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/feed/threadgate.rs b/atrium-api/src/app/bsky/feed/threadgate.rs index ee4030d1..c5f9f554 100644 --- a/atrium-api/src/app/bsky/feed/threadgate.rs +++ b/atrium-api/src/app/bsky/feed/threadgate.rs @@ -2,37 +2,31 @@ //!Definitions for the `app.bsky.feed.threadgate` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { #[serde(skip_serializing_if = "Option::is_none")] pub allow: Option>>, pub created_at: crate::types::string::Datetime, ///Reference (AT-URI) to the post record. pub post: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; ///Allow replies from actors you follow. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct FollowingRule { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct FollowingRuleData {} +pub type FollowingRule = crate::types::Object; ///Allow replies from actors on a list. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ListRule { +pub struct ListRuleData { pub list: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ListRule = crate::types::Object; ///Allow replies from actors mentioned in your post. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MentionRule { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct MentionRuleData {} +pub type MentionRule = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordAllowItem { diff --git a/atrium-api/src/app/bsky/graph/block.rs b/atrium-api/src/app/bsky/graph/block.rs index 4120a3d7..b22aca99 100644 --- a/atrium-api/src/app/bsky/graph/block.rs +++ b/atrium-api/src/app/bsky/graph/block.rs @@ -2,10 +2,9 @@ //!Definitions for the `app.bsky.graph.block` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, ///DID of the account to be blocked. pub subject: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/graph/defs.rs b/atrium-api/src/app/bsky/graph/defs.rs index d0203f2a..a5ef5003 100644 --- a/atrium-api/src/app/bsky/graph/defs.rs +++ b/atrium-api/src/app/bsky/graph/defs.rs @@ -4,16 +4,15 @@ pub const CURATELIST: &str = "app.bsky.graph.defs#curatelist"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ListItemView { +pub struct ListItemViewData { pub subject: crate::app::bsky::actor::defs::ProfileView, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ListItemView = crate::types::Object; pub type ListPurpose = String; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ListView { +pub struct ListViewData { #[serde(skip_serializing_if = "Option::is_none")] pub avatar: Option, pub cid: crate::types::string::Cid, @@ -30,12 +29,11 @@ pub struct ListView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ListView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ListViewBasic { +pub struct ListViewBasicData { #[serde(skip_serializing_if = "Option::is_none")] pub avatar: Option, pub cid: crate::types::string::Cid, @@ -48,34 +46,31 @@ pub struct ListViewBasic { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ListViewBasic = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ListViewerState { +pub struct ListViewerStateData { #[serde(skip_serializing_if = "Option::is_none")] pub blocked: Option, #[serde(skip_serializing_if = "Option::is_none")] pub muted: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ListViewerState = crate::types::Object; ///A list of actors to apply an aggregate moderation action (mute/block) on. pub const MODLIST: &str = "app.bsky.graph.defs#modlist"; ///indicates that a handle or DID could not be resolved #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct NotFoundActor { +pub struct NotFoundActorData { pub actor: crate::types::string::AtIdentifier, pub not_found: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type NotFoundActor = crate::types::Object; ///lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Relationship { +pub struct RelationshipData { pub did: crate::types::string::Did, ///if the actor is followed by this DID, contains the AT-URI of the follow record #[serde(skip_serializing_if = "Option::is_none")] @@ -83,6 +78,5 @@ pub struct Relationship { ///if the actor follows this DID, this is the AT-URI of the follow record #[serde(skip_serializing_if = "Option::is_none")] pub following: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Relationship = crate::types::Object; diff --git a/atrium-api/src/app/bsky/graph/follow.rs b/atrium-api/src/app/bsky/graph/follow.rs index 1ef258e8..e025641d 100644 --- a/atrium-api/src/app/bsky/graph/follow.rs +++ b/atrium-api/src/app/bsky/graph/follow.rs @@ -2,9 +2,8 @@ //!Definitions for the `app.bsky.graph.follow` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, pub subject: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/graph/get_blocks.rs b/atrium-api/src/app/bsky/graph/get_blocks.rs index 9975399b..6591cb5f 100644 --- a/atrium-api/src/app/bsky/graph/get_blocks.rs +++ b/atrium-api/src/app/bsky/graph/get_blocks.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.graph.getBlocks"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub blocks: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_followers.rs b/atrium-api/src/app/bsky/graph/get_followers.rs index 186cf8c9..f0c17f7c 100644 --- a/atrium-api/src/app/bsky/graph/get_followers.rs +++ b/atrium-api/src/app/bsky/graph/get_followers.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.graph.getFollowers"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub followers: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_follows.rs b/atrium-api/src/app/bsky/graph/get_follows.rs index 190bc5bd..ee242423 100644 --- a/atrium-api/src/app/bsky/graph/get_follows.rs +++ b/atrium-api/src/app/bsky/graph/get_follows.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.graph.getFollows"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub follows: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_known_followers.rs b/atrium-api/src/app/bsky/graph/get_known_followers.rs index 4b06b4e4..8e4d69a9 100644 --- a/atrium-api/src/app/bsky/graph/get_known_followers.rs +++ b/atrium-api/src/app/bsky/graph/get_known_followers.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.graph.getKnownFollowers"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub followers: Vec, pub subject: crate::app::bsky::actor::defs::ProfileView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_list.rs b/atrium-api/src/app/bsky/graph/get_list.rs index 3cf2c973..38cd0428 100644 --- a/atrium-api/src/app/bsky/graph/get_list.rs +++ b/atrium-api/src/app/bsky/graph/get_list.rs @@ -3,26 +3,24 @@ pub const NSID: &str = "app.bsky.graph.getList"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, ///Reference (AT-URI) of the list record to hydrate. pub list: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub items: Vec, pub list: crate::app::bsky::graph::defs::ListView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_list_blocks.rs b/atrium-api/src/app/bsky/graph/get_list_blocks.rs index 53b105e2..af6db9cf 100644 --- a/atrium-api/src/app/bsky/graph/get_list_blocks.rs +++ b/atrium-api/src/app/bsky/graph/get_list_blocks.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.graph.getListBlocks"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_list_mutes.rs b/atrium-api/src/app/bsky/graph/get_list_mutes.rs index 5613b8db..b60c7d0d 100644 --- a/atrium-api/src/app/bsky/graph/get_list_mutes.rs +++ b/atrium-api/src/app/bsky/graph/get_list_mutes.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.graph.getListMutes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_lists.rs b/atrium-api/src/app/bsky/graph/get_lists.rs index 5d0502d5..f091d00e 100644 --- a/atrium-api/src/app/bsky/graph/get_lists.rs +++ b/atrium-api/src/app/bsky/graph/get_lists.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.graph.getLists"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The account (actor) to enumerate lists from. pub actor: crate::types::string::AtIdentifier, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub lists: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_mutes.rs b/atrium-api/src/app/bsky/graph/get_mutes.rs index 24f5ef73..5df51933 100644 --- a/atrium-api/src/app/bsky/graph/get_mutes.rs +++ b/atrium-api/src/app/bsky/graph/get_mutes.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "app.bsky.graph.getMutes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub mutes: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/get_relationships.rs b/atrium-api/src/app/bsky/graph/get_relationships.rs index eef00fcb..d9908215 100644 --- a/atrium-api/src/app/bsky/graph/get_relationships.rs +++ b/atrium-api/src/app/bsky/graph/get_relationships.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "app.bsky.graph.getRelationships"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Primary account requesting relationships for. pub actor: crate::types::string::AtIdentifier, ///List of 'other' accounts to be related back to the primary. #[serde(skip_serializing_if = "Option::is_none")] pub others: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub actor: Option, pub relationships: Vec>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs b/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs index fc45f02f..c59b6cc3 100644 --- a/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs +++ b/atrium-api/src/app/bsky/graph/get_suggested_follows_by_actor.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "app.bsky.graph.getSuggestedFollowsByActor"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::AtIdentifier, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub suggestions: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/list.rs b/atrium-api/src/app/bsky/graph/list.rs index 7629971d..a18d9ce1 100644 --- a/atrium-api/src/app/bsky/graph/list.rs +++ b/atrium-api/src/app/bsky/graph/list.rs @@ -2,7 +2,7 @@ //!Definitions for the `app.bsky.graph.list` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { #[serde(skip_serializing_if = "Option::is_none")] pub avatar: Option, pub created_at: crate::types::string::Datetime, @@ -16,9 +16,8 @@ pub struct Record { pub name: String, ///Defines the purpose of the list (aka, moderation-oriented or curration-oriented) pub purpose: crate::app::bsky::graph::defs::ListPurpose, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordLabelsRefs { diff --git a/atrium-api/src/app/bsky/graph/listblock.rs b/atrium-api/src/app/bsky/graph/listblock.rs index 4b09934e..f9fad5ee 100644 --- a/atrium-api/src/app/bsky/graph/listblock.rs +++ b/atrium-api/src/app/bsky/graph/listblock.rs @@ -2,10 +2,9 @@ //!Definitions for the `app.bsky.graph.listblock` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, ///Reference (AT-URI) to the mod list record. pub subject: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/graph/listitem.rs b/atrium-api/src/app/bsky/graph/listitem.rs index 37806c33..4fa88395 100644 --- a/atrium-api/src/app/bsky/graph/listitem.rs +++ b/atrium-api/src/app/bsky/graph/listitem.rs @@ -2,12 +2,11 @@ //!Definitions for the `app.bsky.graph.listitem` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, ///Reference (AT-URI) to the list record (app.bsky.graph.list). pub list: String, ///The account which is included on the list. pub subject: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/app/bsky/graph/mute_actor.rs b/atrium-api/src/app/bsky/graph/mute_actor.rs index 10c69c1c..f2b88707 100644 --- a/atrium-api/src/app/bsky/graph/mute_actor.rs +++ b/atrium-api/src/app/bsky/graph/mute_actor.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.muteActor"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub actor: crate::types::string::AtIdentifier, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/mute_actor_list.rs b/atrium-api/src/app/bsky/graph/mute_actor_list.rs index 6df3b73c..2c89ca43 100644 --- a/atrium-api/src/app/bsky/graph/mute_actor_list.rs +++ b/atrium-api/src/app/bsky/graph/mute_actor_list.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.muteActorList"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub list: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/mute_thread.rs b/atrium-api/src/app/bsky/graph/mute_thread.rs index f9dd0012..e78d8925 100644 --- a/atrium-api/src/app/bsky/graph/mute_thread.rs +++ b/atrium-api/src/app/bsky/graph/mute_thread.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.muteThread"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub root: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/unmute_actor.rs b/atrium-api/src/app/bsky/graph/unmute_actor.rs index 2d9614de..b5d381fd 100644 --- a/atrium-api/src/app/bsky/graph/unmute_actor.rs +++ b/atrium-api/src/app/bsky/graph/unmute_actor.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.unmuteActor"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub actor: crate::types::string::AtIdentifier, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/unmute_actor_list.rs b/atrium-api/src/app/bsky/graph/unmute_actor_list.rs index bcc75b2a..11bef81a 100644 --- a/atrium-api/src/app/bsky/graph/unmute_actor_list.rs +++ b/atrium-api/src/app/bsky/graph/unmute_actor_list.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.unmuteActorList"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub list: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/graph/unmute_thread.rs b/atrium-api/src/app/bsky/graph/unmute_thread.rs index b7dbca93..a0f904a4 100644 --- a/atrium-api/src/app/bsky/graph/unmute_thread.rs +++ b/atrium-api/src/app/bsky/graph/unmute_thread.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.graph.unmuteThread"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub root: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/labeler/defs.rs b/atrium-api/src/app/bsky/labeler/defs.rs index c1e23bda..ca11f840 100644 --- a/atrium-api/src/app/bsky/labeler/defs.rs +++ b/atrium-api/src/app/bsky/labeler/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `app.bsky.labeler.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelerPolicies { +pub struct LabelerPoliciesData { ///Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. #[serde(skip_serializing_if = "Option::is_none")] pub label_value_definitions: Option< @@ -10,12 +10,11 @@ pub struct LabelerPolicies { >, ///The label values which this labeler publishes. May include global or custom labels. pub label_values: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelerPolicies = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelerView { +pub struct LabelerViewData { pub cid: crate::types::string::Cid, pub creator: crate::app::bsky::actor::defs::ProfileView, pub indexed_at: crate::types::string::Datetime, @@ -26,12 +25,11 @@ pub struct LabelerView { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelerView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelerViewDetailed { +pub struct LabelerViewDetailedData { pub cid: crate::types::string::Cid, pub creator: crate::app::bsky::actor::defs::ProfileView, pub indexed_at: crate::types::string::Datetime, @@ -43,14 +41,12 @@ pub struct LabelerViewDetailed { pub uri: String, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelerViewDetailed = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelerViewerState { +pub struct LabelerViewerStateData { #[serde(skip_serializing_if = "Option::is_none")] pub like: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelerViewerState = crate::types::Object; diff --git a/atrium-api/src/app/bsky/labeler/get_services.rs b/atrium-api/src/app/bsky/labeler/get_services.rs index b96460ba..8c50fa9d 100644 --- a/atrium-api/src/app/bsky/labeler/get_services.rs +++ b/atrium-api/src/app/bsky/labeler/get_services.rs @@ -3,20 +3,18 @@ pub const NSID: &str = "app.bsky.labeler.getServices"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub detailed: Option, pub dids: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub views: Vec>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/labeler/service.rs b/atrium-api/src/app/bsky/labeler/service.rs index 1d08ccf6..c5ffd00c 100644 --- a/atrium-api/src/app/bsky/labeler/service.rs +++ b/atrium-api/src/app/bsky/labeler/service.rs @@ -2,14 +2,13 @@ //!Definitions for the `app.bsky.labeler.service` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub created_at: crate::types::string::Datetime, #[serde(skip_serializing_if = "Option::is_none")] pub labels: Option>, pub policies: crate::app::bsky::labeler::defs::LabelerPolicies, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum RecordLabelsRefs { diff --git a/atrium-api/src/app/bsky/notification/get_unread_count.rs b/atrium-api/src/app/bsky/notification/get_unread_count.rs index b0345ab9..6ed2d83c 100644 --- a/atrium-api/src/app/bsky/notification/get_unread_count.rs +++ b/atrium-api/src/app/bsky/notification/get_unread_count.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "app.bsky.notification.getUnreadCount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub count: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/notification/list_notifications.rs b/atrium-api/src/app/bsky/notification/list_notifications.rs index 283d5259..95979f3d 100644 --- a/atrium-api/src/app/bsky/notification/list_notifications.rs +++ b/atrium-api/src/app/bsky/notification/list_notifications.rs @@ -3,27 +3,25 @@ pub const NSID: &str = "app.bsky.notification.listNotifications"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub notifications: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub seen_at: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -34,7 +32,7 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Notification { +pub struct NotificationData { pub author: crate::app::bsky::actor::defs::ProfileView, pub cid: crate::types::string::Cid, pub indexed_at: crate::types::string::Datetime, @@ -47,6 +45,5 @@ pub struct Notification { pub reason_subject: Option, pub record: crate::records::Record, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Notification = crate::types::Object; diff --git a/atrium-api/src/app/bsky/notification/register_push.rs b/atrium-api/src/app/bsky/notification/register_push.rs index 3f02a283..adb868e0 100644 --- a/atrium-api/src/app/bsky/notification/register_push.rs +++ b/atrium-api/src/app/bsky/notification/register_push.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "app.bsky.notification.registerPush"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub app_id: String, pub platform: String, pub service_did: crate::types::string::Did, pub token: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/notification/update_seen.rs b/atrium-api/src/app/bsky/notification/update_seen.rs index 573203c7..9bc378b5 100644 --- a/atrium-api/src/app/bsky/notification/update_seen.rs +++ b/atrium-api/src/app/bsky/notification/update_seen.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "app.bsky.notification.updateSeen"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub seen_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/richtext/facet.rs b/atrium-api/src/app/bsky/richtext/facet.rs index de1ff044..0ff45588 100644 --- a/atrium-api/src/app/bsky/richtext/facet.rs +++ b/atrium-api/src/app/bsky/richtext/facet.rs @@ -3,45 +3,40 @@ ///Annotation of a sub-string within rich text. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub features: Vec>, pub index: ByteSlice, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; ///Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ByteSlice { +pub struct ByteSliceData { pub byte_end: usize, pub byte_start: usize, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ByteSlice = crate::types::Object; ///Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Link { +pub struct LinkData { pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Link = crate::types::Object; ///Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Mention { +pub struct MentionData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Mention = crate::types::Object; ///Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags'). #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Tag { +pub struct TagData { pub tag: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Tag = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum MainFeaturesItem { diff --git a/atrium-api/src/app/bsky/unspecced/defs.rs b/atrium-api/src/app/bsky/unspecced/defs.rs index 8f57c63a..4a0495c6 100644 --- a/atrium-api/src/app/bsky/unspecced/defs.rs +++ b/atrium-api/src/app/bsky/unspecced/defs.rs @@ -2,15 +2,13 @@ //!Definitions for the `app.bsky.unspecced.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SkeletonSearchActor { +pub struct SkeletonSearchActorData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SkeletonSearchActor = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SkeletonSearchPost { +pub struct SkeletonSearchPostData { pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SkeletonSearchPost = crate::types::Object; diff --git a/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs b/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs index 130f3c77..e7bede62 100644 --- a/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs +++ b/atrium-api/src/app/bsky/unspecced/get_popular_feed_generators.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "app.bsky.unspecced.getPopularFeedGenerators"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub query: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub feeds: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs b/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs index 62ea169c..2ded4712 100644 --- a/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/get_suggestions_skeleton.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.unspecced.getSuggestionsSkeleton"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -11,18 +11,16 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs b/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs index b4b9d1e9..d2b148ab 100644 --- a/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs +++ b/atrium-api/src/app/bsky/unspecced/get_tagged_suggestions.rs @@ -3,17 +3,14 @@ pub const NSID: &str = "app.bsky.unspecced.getTaggedSuggestions"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct ParametersData {} +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub suggestions: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -24,10 +21,9 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Suggestion { +pub struct SuggestionData { pub subject: String, pub subject_type: String, pub tag: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Suggestion = crate::types::Object; diff --git a/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs b/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs index 8516ceeb..b3b8d0b8 100644 --- a/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/search_actors_skeleton.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.unspecced.searchActorsSkeleton"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Optional pagination mechanism; may not necessarily allow scrolling through entire result set. #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, @@ -17,21 +17,19 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub actors: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs b/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs index 9f6b0c9f..8235aa53 100644 --- a/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs +++ b/atrium-api/src/app/bsky/unspecced/search_posts_skeleton.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "app.bsky.unspecced.searchPostsSkeleton"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Filter to posts by the given account. Handles are resolved to DID before query-time. #[serde(skip_serializing_if = "Option::is_none")] pub author: Option, @@ -41,21 +41,19 @@ pub struct Parameters { ///DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries. #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. #[serde(skip_serializing_if = "Option::is_none")] pub hits_total: Option, pub posts: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/chat/bsky/actor/declaration.rs b/atrium-api/src/chat/bsky/actor/declaration.rs index f5119b5a..e2630419 100644 --- a/atrium-api/src/chat/bsky/actor/declaration.rs +++ b/atrium-api/src/chat/bsky/actor/declaration.rs @@ -2,8 +2,7 @@ //!Definitions for the `chat.bsky.actor.declaration` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub allow_incoming: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/chat/bsky/actor/defs.rs b/atrium-api/src/chat/bsky/actor/defs.rs index c06467d8..ce9ded75 100644 --- a/atrium-api/src/chat/bsky/actor/defs.rs +++ b/atrium-api/src/chat/bsky/actor/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `chat.bsky.actor.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ProfileViewBasic { +pub struct ProfileViewBasicData { #[serde(skip_serializing_if = "Option::is_none")] pub associated: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -18,6 +18,5 @@ pub struct ProfileViewBasic { pub labels: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ProfileViewBasic = crate::types::Object; diff --git a/atrium-api/src/chat/bsky/actor/delete_account.rs b/atrium-api/src/chat/bsky/actor/delete_account.rs index 6c7fd6c9..b79ce693 100644 --- a/atrium-api/src/chat/bsky/actor/delete_account.rs +++ b/atrium-api/src/chat/bsky/actor/delete_account.rs @@ -3,10 +3,8 @@ pub const NSID: &str = "chat.bsky.actor.deleteAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, -} +pub struct OutputData {} +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/defs.rs b/atrium-api/src/chat/bsky/convo/defs.rs index 84527037..fe1b5c56 100644 --- a/atrium-api/src/chat/bsky/convo/defs.rs +++ b/atrium-api/src/chat/bsky/convo/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `chat.bsky.convo.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ConvoView { +pub struct ConvoViewData { pub id: String, #[serde(skip_serializing_if = "Option::is_none")] pub last_message: Option>, @@ -10,77 +10,69 @@ pub struct ConvoView { pub muted: bool, pub rev: String, pub unread_count: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ConvoView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct DeletedMessageView { +pub struct DeletedMessageViewData { pub id: String, pub rev: String, pub sender: MessageViewSender, pub sent_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type DeletedMessageView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LogBeginConvo { +pub struct LogBeginConvoData { pub convo_id: String, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LogBeginConvo = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LogCreateMessage { +pub struct LogCreateMessageData { pub convo_id: String, pub message: crate::types::Union, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LogCreateMessage = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LogDeleteMessage { +pub struct LogDeleteMessageData { pub convo_id: String, pub message: crate::types::Union, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LogDeleteMessage = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LogLeaveConvo { +pub struct LogLeaveConvoData { pub convo_id: String, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LogLeaveConvo = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MessageInput { +pub struct MessageInputData { #[serde(skip_serializing_if = "Option::is_none")] pub embed: Option>, ///Annotations of text (mentions, URLs, hashtags, etc) #[serde(skip_serializing_if = "Option::is_none")] pub facets: Option>, pub text: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MessageInput = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MessageRef { +pub struct MessageRefData { pub convo_id: String, pub did: crate::types::string::Did, pub message_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MessageRef = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MessageView { +pub struct MessageViewData { #[serde(skip_serializing_if = "Option::is_none")] pub embed: Option>, ///Annotations of text (mentions, URLs, hashtags, etc) @@ -91,16 +83,14 @@ pub struct MessageView { pub sender: MessageViewSender, pub sent_at: crate::types::string::Datetime, pub text: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MessageView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct MessageViewSender { +pub struct MessageViewSenderData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type MessageViewSender = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum ConvoViewLastMessageRefs { diff --git a/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs b/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs index 9eeb69f3..47ab8baf 100644 --- a/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs +++ b/atrium-api/src/chat/bsky/convo/delete_message_for_self.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "chat.bsky.convo.deleteMessageForSelf"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, pub message_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = crate::chat::bsky::convo::defs::DeletedMessageView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/get_convo.rs b/atrium-api/src/chat/bsky/convo/get_convo.rs index d02a59b8..c2e6ab26 100644 --- a/atrium-api/src/chat/bsky/convo/get_convo.rs +++ b/atrium-api/src/chat/bsky/convo/get_convo.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "chat.bsky.convo.getConvo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub convo_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo: crate::chat::bsky::convo::defs::ConvoView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs b/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs index 52290fe4..d128a003 100644 --- a/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs +++ b/atrium-api/src/chat/bsky/convo/get_convo_for_members.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "chat.bsky.convo.getConvoForMembers"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub members: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo: crate::chat::bsky::convo::defs::ConvoView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/get_log.rs b/atrium-api/src/chat/bsky/convo/get_log.rs index d8b5fc1c..49d5897e 100644 --- a/atrium-api/src/chat/bsky/convo/get_log.rs +++ b/atrium-api/src/chat/bsky/convo/get_log.rs @@ -3,21 +3,19 @@ pub const NSID: &str = "chat.bsky.convo.getLog"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub logs: Vec>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/get_messages.rs b/atrium-api/src/chat/bsky/convo/get_messages.rs index 160d871d..8abe1658 100644 --- a/atrium-api/src/chat/bsky/convo/get_messages.rs +++ b/atrium-api/src/chat/bsky/convo/get_messages.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "chat.bsky.convo.getMessages"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub convo_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub messages: Vec>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/leave_convo.rs b/atrium-api/src/chat/bsky/convo/leave_convo.rs index 809837c9..c23ceb3f 100644 --- a/atrium-api/src/chat/bsky/convo/leave_convo.rs +++ b/atrium-api/src/chat/bsky/convo/leave_convo.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "chat.bsky.convo.leaveConvo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo_id: String, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/list_convos.rs b/atrium-api/src/chat/bsky/convo/list_convos.rs index 0874aeb2..e2484b71 100644 --- a/atrium-api/src/chat/bsky/convo/list_convos.rs +++ b/atrium-api/src/chat/bsky/convo/list_convos.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "chat.bsky.convo.listConvos"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convos: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/mute_convo.rs b/atrium-api/src/chat/bsky/convo/mute_convo.rs index a2b33fa7..bf9ec580 100644 --- a/atrium-api/src/chat/bsky/convo/mute_convo.rs +++ b/atrium-api/src/chat/bsky/convo/mute_convo.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "chat.bsky.convo.muteConvo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo: crate::chat::bsky::convo::defs::ConvoView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/send_message.rs b/atrium-api/src/chat/bsky/convo/send_message.rs index 4e3b9896..ce867315 100644 --- a/atrium-api/src/chat/bsky/convo/send_message.rs +++ b/atrium-api/src/chat/bsky/convo/send_message.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "chat.bsky.convo.sendMessage"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, pub message: crate::chat::bsky::convo::defs::MessageInput, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = crate::chat::bsky::convo::defs::MessageView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/chat/bsky/convo/send_message_batch.rs b/atrium-api/src/chat/bsky/convo/send_message_batch.rs index b33571da..d038f8e0 100644 --- a/atrium-api/src/chat/bsky/convo/send_message_batch.rs +++ b/atrium-api/src/chat/bsky/convo/send_message_batch.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "chat.bsky.convo.sendMessageBatch"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub items: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub items: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -25,9 +23,8 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct BatchItem { +pub struct BatchItemData { pub convo_id: String, pub message: crate::chat::bsky::convo::defs::MessageInput, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type BatchItem = crate::types::Object; diff --git a/atrium-api/src/chat/bsky/convo/unmute_convo.rs b/atrium-api/src/chat/bsky/convo/unmute_convo.rs index ab05a641..e04e012f 100644 --- a/atrium-api/src/chat/bsky/convo/unmute_convo.rs +++ b/atrium-api/src/chat/bsky/convo/unmute_convo.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "chat.bsky.convo.unmuteConvo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo: crate::chat::bsky::convo::defs::ConvoView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/convo/update_read.rs b/atrium-api/src/chat/bsky/convo/update_read.rs index 29a5a02a..f3f82db3 100644 --- a/atrium-api/src/chat/bsky/convo/update_read.rs +++ b/atrium-api/src/chat/bsky/convo/update_read.rs @@ -3,20 +3,18 @@ pub const NSID: &str = "chat.bsky.convo.updateRead"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub convo_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub message_id: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub convo: crate::chat::bsky::convo::defs::ConvoView, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs b/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs index 77e222f9..fb53cd7a 100644 --- a/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs +++ b/atrium-api/src/chat/bsky/moderation/get_actor_metadata.rs @@ -3,20 +3,18 @@ pub const NSID: &str = "chat.bsky.moderation.getActorMetadata"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub actor: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub all: Metadata, pub day: Metadata, pub month: Metadata, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -27,11 +25,10 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Metadata { +pub struct MetadataData { pub convos: i64, pub convos_started: i64, pub messages_received: i64, pub messages_sent: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Metadata = crate::types::Object; diff --git a/atrium-api/src/chat/bsky/moderation/get_message_context.rs b/atrium-api/src/chat/bsky/moderation/get_message_context.rs index 6fd1920f..c313a5f8 100644 --- a/atrium-api/src/chat/bsky/moderation/get_message_context.rs +++ b/atrium-api/src/chat/bsky/moderation/get_message_context.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "chat.bsky.moderation.getMessageContext"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub after: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -12,16 +12,14 @@ pub struct Parameters { #[serde(skip_serializing_if = "Option::is_none")] pub convo_id: Option, pub message_id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub messages: Vec>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/chat/bsky/moderation/update_actor_access.rs b/atrium-api/src/chat/bsky/moderation/update_actor_access.rs index d5893768..d94bf171 100644 --- a/atrium-api/src/chat/bsky/moderation/update_actor_access.rs +++ b/atrium-api/src/chat/bsky/moderation/update_actor_access.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "chat.bsky.moderation.updateActorAccess"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub actor: crate::types::string::Did, pub allow_access: bool, #[serde(skip_serializing_if = "Option::is_none")] pub r#ref: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/defs.rs b/atrium-api/src/com/atproto/admin/defs.rs index 0fd77524..5706e520 100644 --- a/atrium-api/src/com/atproto/admin/defs.rs +++ b/atrium-api/src/com/atproto/admin/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `com.atproto.admin.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AccountView { +pub struct AccountViewData { #[serde(skip_serializing_if = "Option::is_none")] pub deactivated_at: Option, pub did: crate::types::string::Did, @@ -22,32 +22,28 @@ pub struct AccountView { pub invites_disabled: Option, #[serde(skip_serializing_if = "Option::is_none")] pub related_records: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AccountView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoBlobRef { +pub struct RepoBlobRefData { pub cid: crate::types::string::Cid, pub did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub record_uri: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoBlobRef = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoRef { +pub struct RepoRefData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoRef = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct StatusAttr { +pub struct StatusAttrData { pub applied: bool, #[serde(skip_serializing_if = "Option::is_none")] pub r#ref: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type StatusAttr = crate::types::Object; diff --git a/atrium-api/src/com/atproto/admin/delete_account.rs b/atrium-api/src/com/atproto/admin/delete_account.rs index ce815f06..cb434c16 100644 --- a/atrium-api/src/com/atproto/admin/delete_account.rs +++ b/atrium-api/src/com/atproto/admin/delete_account.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.admin.deleteAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/disable_account_invites.rs b/atrium-api/src/com/atproto/admin/disable_account_invites.rs index 803f0824..b4b13469 100644 --- a/atrium-api/src/com/atproto/admin/disable_account_invites.rs +++ b/atrium-api/src/com/atproto/admin/disable_account_invites.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "com.atproto.admin.disableAccountInvites"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub account: crate::types::string::Did, ///Optional reason for disabled invites. #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/disable_invite_codes.rs b/atrium-api/src/com/atproto/admin/disable_invite_codes.rs index 8a384069..821e455e 100644 --- a/atrium-api/src/com/atproto/admin/disable_invite_codes.rs +++ b/atrium-api/src/com/atproto/admin/disable_invite_codes.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "com.atproto.admin.disableInviteCodes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { #[serde(skip_serializing_if = "Option::is_none")] pub accounts: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub codes: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/enable_account_invites.rs b/atrium-api/src/com/atproto/admin/enable_account_invites.rs index d7691cdc..c6fc0445 100644 --- a/atrium-api/src/com/atproto/admin/enable_account_invites.rs +++ b/atrium-api/src/com/atproto/admin/enable_account_invites.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "com.atproto.admin.enableAccountInvites"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub account: crate::types::string::Did, ///Optional reason for enabled invites. #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/get_account_info.rs b/atrium-api/src/com/atproto/admin/get_account_info.rs index 988b5570..3a5fb822 100644 --- a/atrium-api/src/com/atproto/admin/get_account_info.rs +++ b/atrium-api/src/com/atproto/admin/get_account_info.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.admin.getAccountInfo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; pub type Output = crate::com::atproto::admin::defs::AccountView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/com/atproto/admin/get_account_infos.rs b/atrium-api/src/com/atproto/admin/get_account_infos.rs index a5f42ede..b353516a 100644 --- a/atrium-api/src/com/atproto/admin/get_account_infos.rs +++ b/atrium-api/src/com/atproto/admin/get_account_infos.rs @@ -3,18 +3,16 @@ pub const NSID: &str = "com.atproto.admin.getAccountInfos"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub dids: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub infos: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/get_invite_codes.rs b/atrium-api/src/com/atproto/admin/get_invite_codes.rs index 5da22e58..82505147 100644 --- a/atrium-api/src/com/atproto/admin/get_invite_codes.rs +++ b/atrium-api/src/com/atproto/admin/get_invite_codes.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "com.atproto.admin.getInviteCodes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub sort: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub codes: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/get_subject_status.rs b/atrium-api/src/com/atproto/admin/get_subject_status.rs index 74b533bf..51a645c9 100644 --- a/atrium-api/src/com/atproto/admin/get_subject_status.rs +++ b/atrium-api/src/com/atproto/admin/get_subject_status.rs @@ -3,27 +3,25 @@ pub const NSID: &str = "com.atproto.admin.getSubjectStatus"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub blob: Option, #[serde(skip_serializing_if = "Option::is_none")] pub did: Option, #[serde(skip_serializing_if = "Option::is_none")] pub uri: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub deactivated: Option, pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/search_accounts.rs b/atrium-api/src/com/atproto/admin/search_accounts.rs index 2df856fc..6dc64c46 100644 --- a/atrium-api/src/com/atproto/admin/search_accounts.rs +++ b/atrium-api/src/com/atproto/admin/search_accounts.rs @@ -3,25 +3,23 @@ pub const NSID: &str = "com.atproto.admin.searchAccounts"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub email: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub accounts: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/send_email.rs b/atrium-api/src/com/atproto/admin/send_email.rs index f6d885af..0193e922 100644 --- a/atrium-api/src/com/atproto/admin/send_email.rs +++ b/atrium-api/src/com/atproto/admin/send_email.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.admin.sendEmail"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, @@ -12,16 +12,14 @@ pub struct Input { pub sender_did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub subject: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub sent: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/update_account_email.rs b/atrium-api/src/com/atproto/admin/update_account_email.rs index 34138fda..6b2f058a 100644 --- a/atrium-api/src/com/atproto/admin/update_account_email.rs +++ b/atrium-api/src/com/atproto/admin/update_account_email.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.admin.updateAccountEmail"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The handle or DID of the repo. pub account: crate::types::string::AtIdentifier, pub email: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/update_account_handle.rs b/atrium-api/src/com/atproto/admin/update_account_handle.rs index 26a2f8bb..43735f6a 100644 --- a/atrium-api/src/com/atproto/admin/update_account_handle.rs +++ b/atrium-api/src/com/atproto/admin/update_account_handle.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.admin.updateAccountHandle"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub did: crate::types::string::Did, pub handle: crate::types::string::Handle, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/update_account_password.rs b/atrium-api/src/com/atproto/admin/update_account_password.rs index 88c25ca7..3db189c7 100644 --- a/atrium-api/src/com/atproto/admin/update_account_password.rs +++ b/atrium-api/src/com/atproto/admin/update_account_password.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.admin.updateAccountPassword"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub did: crate::types::string::Did, pub password: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/admin/update_subject_status.rs b/atrium-api/src/com/atproto/admin/update_subject_status.rs index 0d6d00f4..71fa619b 100644 --- a/atrium-api/src/com/atproto/admin/update_subject_status.rs +++ b/atrium-api/src/com/atproto/admin/update_subject_status.rs @@ -3,24 +3,22 @@ pub const NSID: &str = "com.atproto.admin.updateSubjectStatus"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { #[serde(skip_serializing_if = "Option::is_none")] pub deactivated: Option, pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub takedown: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs b/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs index 74539217..dbbef5a2 100644 --- a/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs +++ b/atrium-api/src/com/atproto/identity/get_recommended_did_credentials.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.identity.getRecommendedDidCredentials"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub also_known_as: Option>, ///Recommended rotation keys for PLC dids. Should be undefined (or ignored) for did:webs. @@ -13,9 +13,8 @@ pub struct Output { pub services: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_methods: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/identity/resolve_handle.rs b/atrium-api/src/com/atproto/identity/resolve_handle.rs index 54c43c85..42218b2c 100644 --- a/atrium-api/src/com/atproto/identity/resolve_handle.rs +++ b/atrium-api/src/com/atproto/identity/resolve_handle.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "com.atproto.identity.resolveHandle"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The handle to resolve. pub handle: crate::types::string::Handle, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/identity/sign_plc_operation.rs b/atrium-api/src/com/atproto/identity/sign_plc_operation.rs index a416c0a4..15d7282b 100644 --- a/atrium-api/src/com/atproto/identity/sign_plc_operation.rs +++ b/atrium-api/src/com/atproto/identity/sign_plc_operation.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.identity.signPlcOperation"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { #[serde(skip_serializing_if = "Option::is_none")] pub also_known_as: Option>, #[serde(skip_serializing_if = "Option::is_none")] @@ -15,17 +15,15 @@ pub struct Input { pub token: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_methods: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { ///A signed DID PLC operation. pub operation: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/identity/submit_plc_operation.rs b/atrium-api/src/com/atproto/identity/submit_plc_operation.rs index eb7a2bea..22ab75ba 100644 --- a/atrium-api/src/com/atproto/identity/submit_plc_operation.rs +++ b/atrium-api/src/com/atproto/identity/submit_plc_operation.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.identity.submitPlcOperation"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub operation: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/identity/update_handle.rs b/atrium-api/src/com/atproto/identity/update_handle.rs index 727192ac..a54d5763 100644 --- a/atrium-api/src/com/atproto/identity/update_handle.rs +++ b/atrium-api/src/com/atproto/identity/update_handle.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.identity.updateHandle"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The new handle. pub handle: crate::types::string::Handle, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/label/defs.rs b/atrium-api/src/com/atproto/label/defs.rs index 7be7b14f..55f69e8b 100644 --- a/atrium-api/src/com/atproto/label/defs.rs +++ b/atrium-api/src/com/atproto/label/defs.rs @@ -3,7 +3,7 @@ ///Metadata tag on an atproto resource (eg, repo or record). #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Label { +pub struct LabelData { ///Optionally, CID specifying the specific version of 'uri' resource this label applies to. #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, @@ -29,14 +29,13 @@ pub struct Label { ///The AT Protocol version of the label object. #[serde(skip_serializing_if = "Option::is_none")] pub ver: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Label = crate::types::Object; pub type LabelValue = String; ///Declares a label value and its expected interpertations and behaviors. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelValueDefinition { +pub struct LabelValueDefinitionData { ///Does the user need to have adult content enabled in order to configure this label? #[serde(skip_serializing_if = "Option::is_none")] pub adult_only: Option, @@ -50,36 +49,34 @@ pub struct LabelValueDefinition { pub locales: Vec, ///How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. pub severity: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelValueDefinition = crate::types::Object; ///Strings which describe the label in the UI, localized into a specific language. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct LabelValueDefinitionStrings { +pub struct LabelValueDefinitionStringsData { ///A longer description of what the label means and why it might be applied. pub description: String, ///The code of the language these strings are written in. pub lang: crate::types::string::Language, ///A short human-readable name for the label. pub name: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type LabelValueDefinitionStrings = crate::types::Object< + LabelValueDefinitionStringsData, +>; ///Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SelfLabel { +pub struct SelfLabelData { ///The short string name of the value or type of this label. pub val: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SelfLabel = crate::types::Object; ///Metadata tags on an atproto record, published by the author within the record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SelfLabels { +pub struct SelfLabelsData { pub values: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SelfLabels = crate::types::Object; diff --git a/atrium-api/src/com/atproto/label/query_labels.rs b/atrium-api/src/com/atproto/label/query_labels.rs index 18626548..de1c279c 100644 --- a/atrium-api/src/com/atproto/label/query_labels.rs +++ b/atrium-api/src/com/atproto/label/query_labels.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.label.queryLabels"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -13,18 +13,16 @@ pub struct Parameters { pub sources: Option>, ///List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. pub uri_patterns: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub labels: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/label/subscribe_labels.rs b/atrium-api/src/com/atproto/label/subscribe_labels.rs index bda073c1..452cf346 100644 --- a/atrium-api/src/com/atproto/label/subscribe_labels.rs +++ b/atrium-api/src/com/atproto/label/subscribe_labels.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.label.subscribeLabels"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The last known event seq number to backfill from. #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { @@ -30,21 +29,19 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Info { +pub struct InfoData { #[serde(skip_serializing_if = "Option::is_none")] pub message: Option, pub name: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Info = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Labels { +pub struct LabelsData { pub labels: Vec, pub seq: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Labels = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum Message { diff --git a/atrium-api/src/com/atproto/moderation/create_report.rs b/atrium-api/src/com/atproto/moderation/create_report.rs index c412f2e8..b9197428 100644 --- a/atrium-api/src/com/atproto/moderation/create_report.rs +++ b/atrium-api/src/com/atproto/moderation/create_report.rs @@ -3,19 +3,18 @@ pub const NSID: &str = "com.atproto.moderation.createReport"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Additional context about the content and violation. #[serde(skip_serializing_if = "Option::is_none")] pub reason: Option, ///Indicates the broad category of violation the report is for. pub reason_type: crate::com::atproto::moderation::defs::ReasonType, pub subject: crate::types::Union, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub created_at: crate::types::string::Datetime, pub id: i64, #[serde(skip_serializing_if = "Option::is_none")] @@ -23,9 +22,8 @@ pub struct Output { pub reason_type: crate::com::atproto::moderation::defs::ReasonType, pub reported_by: crate::types::string::Did, pub subject: crate::types::Union, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/repo/apply_writes.rs b/atrium-api/src/com/atproto/repo/apply_writes.rs index 546ef80a..f1172f5f 100644 --- a/atrium-api/src/com/atproto/repo/apply_writes.rs +++ b/atrium-api/src/com/atproto/repo/apply_writes.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.applyWrites"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The handle or DID of the repo (aka, current account). pub repo: crate::types::string::AtIdentifier, ///If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. @@ -13,9 +13,8 @@ pub struct Input { #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, pub writes: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { @@ -38,33 +37,30 @@ impl std::fmt::Display for Error { ///Operation which creates a new record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Create { +pub struct CreateData { pub collection: crate::types::string::Nsid, #[serde(skip_serializing_if = "Option::is_none")] pub rkey: Option, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Create = crate::types::Object; ///Operation which deletes an existing record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Delete { +pub struct DeleteData { pub collection: crate::types::string::Nsid, pub rkey: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Delete = crate::types::Object; ///Operation which updates an existing record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Update { +pub struct UpdateData { pub collection: crate::types::string::Nsid, pub rkey: String, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Update = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum InputWritesItem { diff --git a/atrium-api/src/com/atproto/repo/create_record.rs b/atrium-api/src/com/atproto/repo/create_record.rs index cced42f0..a53f0727 100644 --- a/atrium-api/src/com/atproto/repo/create_record.rs +++ b/atrium-api/src/com/atproto/repo/create_record.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.createRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The NSID of the record collection. pub collection: crate::types::string::Nsid, ///The record itself. Must contain a $type field. @@ -19,17 +19,15 @@ pub struct Input { ///Can be set to 'false' to skip Lexicon schema validation of record data. #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub cid: crate::types::string::Cid, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/repo/delete_record.rs b/atrium-api/src/com/atproto/repo/delete_record.rs index e38407d2..9b65ae30 100644 --- a/atrium-api/src/com/atproto/repo/delete_record.rs +++ b/atrium-api/src/com/atproto/repo/delete_record.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.deleteRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The NSID of the record collection. pub collection: crate::types::string::Nsid, ///The handle or DID of the repo (aka, current account). @@ -16,9 +16,8 @@ pub struct Input { ///Compare and swap with the previous record by CID. #[serde(skip_serializing_if = "Option::is_none")] pub swap_record: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/repo/describe_repo.rs b/atrium-api/src/com/atproto/repo/describe_repo.rs index 9b408fb7..b2da43ac 100644 --- a/atrium-api/src/com/atproto/repo/describe_repo.rs +++ b/atrium-api/src/com/atproto/repo/describe_repo.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "com.atproto.repo.describeRepo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The handle or DID of the repo. pub repo: crate::types::string::AtIdentifier, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { ///List of all the collections (NSIDs) for which this repo contains at least one record. pub collections: Vec, pub did: crate::types::string::Did, @@ -20,9 +19,8 @@ pub struct Output { pub handle: crate::types::string::Handle, ///Indicates if handle is currently valid (resolves bi-directionally) pub handle_is_correct: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/repo/get_record.rs b/atrium-api/src/com/atproto/repo/get_record.rs index 53ff4271..df7d5aad 100644 --- a/atrium-api/src/com/atproto/repo/get_record.rs +++ b/atrium-api/src/com/atproto/repo/get_record.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.getRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The CID of the version of the record. If not specified, then return the most recent version. #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, @@ -13,19 +13,17 @@ pub struct Parameters { pub repo: crate::types::string::AtIdentifier, ///The Record Key. pub rkey: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, pub uri: String, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/repo/list_missing_blobs.rs b/atrium-api/src/com/atproto/repo/list_missing_blobs.rs index 1d399258..83246e72 100644 --- a/atrium-api/src/com/atproto/repo/list_missing_blobs.rs +++ b/atrium-api/src/com/atproto/repo/list_missing_blobs.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "com.atproto.repo.listMissingBlobs"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub blobs: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -30,9 +28,8 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RecordBlob { +pub struct RecordBlobData { pub cid: crate::types::string::Cid, pub record_uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RecordBlob = crate::types::Object; diff --git a/atrium-api/src/com/atproto/repo/list_records.rs b/atrium-api/src/com/atproto/repo/list_records.rs index ab0b5916..d6fd21ae 100644 --- a/atrium-api/src/com/atproto/repo/list_records.rs +++ b/atrium-api/src/com/atproto/repo/list_records.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.listRecords"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The NSID of the record type. pub collection: crate::types::string::Nsid, #[serde(skip_serializing_if = "Option::is_none")] @@ -22,18 +22,16 @@ pub struct Parameters { ///DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) #[serde(skip_serializing_if = "Option::is_none")] pub rkey_start: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub records: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -44,10 +42,9 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Record { +pub struct RecordData { pub cid: crate::types::string::Cid, pub uri: String, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Record = crate::types::Object; diff --git a/atrium-api/src/com/atproto/repo/put_record.rs b/atrium-api/src/com/atproto/repo/put_record.rs index 87bca5e5..2abd4b57 100644 --- a/atrium-api/src/com/atproto/repo/put_record.rs +++ b/atrium-api/src/com/atproto/repo/put_record.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.repo.putRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The NSID of the record collection. pub collection: crate::types::string::Nsid, ///The record to write. @@ -21,17 +21,15 @@ pub struct Input { ///Can be set to 'false' to skip Lexicon schema validation of record data. #[serde(skip_serializing_if = "Option::is_none")] pub validate: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub cid: crate::types::string::Cid, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/repo/strong_ref.rs b/atrium-api/src/com/atproto/repo/strong_ref.rs index 36627ff7..1849b7da 100644 --- a/atrium-api/src/com/atproto/repo/strong_ref.rs +++ b/atrium-api/src/com/atproto/repo/strong_ref.rs @@ -3,9 +3,8 @@ //!A URI with a content-hash fingerprint. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Main { +pub struct MainData { pub cid: crate::types::string::Cid, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Main = crate::types::Object; diff --git a/atrium-api/src/com/atproto/repo/upload_blob.rs b/atrium-api/src/com/atproto/repo/upload_blob.rs index 24ad78d4..5068981a 100644 --- a/atrium-api/src/com/atproto/repo/upload_blob.rs +++ b/atrium-api/src/com/atproto/repo/upload_blob.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.repo.uploadBlob"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub blob: crate::types::BlobRef, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/check_account_status.rs b/atrium-api/src/com/atproto/server/check_account_status.rs index ddbb8a2c..4f8b7811 100644 --- a/atrium-api/src/com/atproto/server/check_account_status.rs +++ b/atrium-api/src/com/atproto/server/check_account_status.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.server.checkAccountStatus"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub activated: bool, pub expected_blobs: i64, pub imported_blobs: i64, @@ -13,9 +13,8 @@ pub struct Output { pub repo_commit: crate::types::string::Cid, pub repo_rev: String, pub valid_did: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/confirm_email.rs b/atrium-api/src/com/atproto/server/confirm_email.rs index 9bd13061..a7bd0deb 100644 --- a/atrium-api/src/com/atproto/server/confirm_email.rs +++ b/atrium-api/src/com/atproto/server/confirm_email.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.server.confirmEmail"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub email: String, pub token: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/create_account.rs b/atrium-api/src/com/atproto/server/create_account.rs index 8849d564..034928ec 100644 --- a/atrium-api/src/com/atproto/server/create_account.rs +++ b/atrium-api/src/com/atproto/server/create_account.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.server.createAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Pre-existing atproto DID, being imported to a new account. #[serde(skip_serializing_if = "Option::is_none")] pub did: Option, @@ -26,13 +26,12 @@ pub struct Input { pub verification_code: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verification_phone: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; ///Account login session returned on successful account creation. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub access_jwt: String, ///The DID of the new account. pub did: crate::types::string::Did, @@ -41,9 +40,8 @@ pub struct Output { pub did_doc: Option, pub handle: crate::types::string::Handle, pub refresh_jwt: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/create_app_password.rs b/atrium-api/src/com/atproto/server/create_app_password.rs index 6a36619e..56c39fa7 100644 --- a/atrium-api/src/com/atproto/server/create_app_password.rs +++ b/atrium-api/src/com/atproto/server/create_app_password.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "com.atproto.server.createAppPassword"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///A short name for the App Password, to help distinguish them. pub name: String, ///If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients. #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = AppPassword; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] @@ -33,12 +32,11 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AppPassword { +pub struct AppPasswordData { pub created_at: crate::types::string::Datetime, pub name: String, pub password: String, #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AppPassword = crate::types::Object; diff --git a/atrium-api/src/com/atproto/server/create_invite_code.rs b/atrium-api/src/com/atproto/server/create_invite_code.rs index de319ddf..2458e9f8 100644 --- a/atrium-api/src/com/atproto/server/create_invite_code.rs +++ b/atrium-api/src/com/atproto/server/create_invite_code.rs @@ -3,20 +3,18 @@ pub const NSID: &str = "com.atproto.server.createInviteCode"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { #[serde(skip_serializing_if = "Option::is_none")] pub for_account: Option, pub use_count: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub code: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/create_invite_codes.rs b/atrium-api/src/com/atproto/server/create_invite_codes.rs index 256a943d..124383fc 100644 --- a/atrium-api/src/com/atproto/server/create_invite_codes.rs +++ b/atrium-api/src/com/atproto/server/create_invite_codes.rs @@ -3,21 +3,19 @@ pub const NSID: &str = "com.atproto.server.createInviteCodes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub code_count: i64, #[serde(skip_serializing_if = "Option::is_none")] pub for_accounts: Option>, pub use_count: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub codes: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -28,9 +26,8 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AccountCodes { +pub struct AccountCodesData { pub account: String, pub codes: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AccountCodes = crate::types::Object; diff --git a/atrium-api/src/com/atproto/server/create_session.rs b/atrium-api/src/com/atproto/server/create_session.rs index e858ba17..7bb4a9f3 100644 --- a/atrium-api/src/com/atproto/server/create_session.rs +++ b/atrium-api/src/com/atproto/server/create_session.rs @@ -3,18 +3,17 @@ pub const NSID: &str = "com.atproto.server.createSession"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { #[serde(skip_serializing_if = "Option::is_none")] pub auth_factor_token: Option, ///Handle or other identifier supported by the server for the authenticating user. pub identifier: String, pub password: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub access_jwt: String, #[serde(skip_serializing_if = "Option::is_none")] pub active: Option, @@ -32,9 +31,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/deactivate_account.rs b/atrium-api/src/com/atproto/server/deactivate_account.rs index cc295e2c..3a757019 100644 --- a/atrium-api/src/com/atproto/server/deactivate_account.rs +++ b/atrium-api/src/com/atproto/server/deactivate_account.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.server.deactivateAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///A recommendation to server as to how long they should hold onto the deactivated account before deleting. #[serde(skip_serializing_if = "Option::is_none")] pub delete_after: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/defs.rs b/atrium-api/src/com/atproto/server/defs.rs index 4b9c7c96..3b11a988 100644 --- a/atrium-api/src/com/atproto/server/defs.rs +++ b/atrium-api/src/com/atproto/server/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `com.atproto.server.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct InviteCode { +pub struct InviteCodeData { pub available: i64, pub code: String, pub created_at: crate::types::string::Datetime, @@ -10,14 +10,12 @@ pub struct InviteCode { pub disabled: bool, pub for_account: String, pub uses: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type InviteCode = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct InviteCodeUse { +pub struct InviteCodeUseData { pub used_at: crate::types::string::Datetime, pub used_by: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type InviteCodeUse = crate::types::Object; diff --git a/atrium-api/src/com/atproto/server/delete_account.rs b/atrium-api/src/com/atproto/server/delete_account.rs index dae1e4bd..fa982f69 100644 --- a/atrium-api/src/com/atproto/server/delete_account.rs +++ b/atrium-api/src/com/atproto/server/delete_account.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.server.deleteAccount"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub did: crate::types::string::Did, pub password: String, pub token: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/describe_server.rs b/atrium-api/src/com/atproto/server/describe_server.rs index 0d10cfd5..40945aaf 100644 --- a/atrium-api/src/com/atproto/server/describe_server.rs +++ b/atrium-api/src/com/atproto/server/describe_server.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.server.describeServer"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { ///List of domain suffixes that can be used in account handles. pub available_user_domains: Vec, ///Contact information @@ -19,9 +19,8 @@ pub struct Output { ///If true, a phone verification token must be supplied to create an account on this instance. #[serde(skip_serializing_if = "Option::is_none")] pub phone_verification_required: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -32,19 +31,17 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Contact { +pub struct ContactData { #[serde(skip_serializing_if = "Option::is_none")] pub email: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Contact = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Links { +pub struct LinksData { #[serde(skip_serializing_if = "Option::is_none")] pub privacy_policy: Option, #[serde(skip_serializing_if = "Option::is_none")] pub terms_of_service: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Links = crate::types::Object; diff --git a/atrium-api/src/com/atproto/server/get_account_invite_codes.rs b/atrium-api/src/com/atproto/server/get_account_invite_codes.rs index e2f7c55a..fcf1a4d2 100644 --- a/atrium-api/src/com/atproto/server/get_account_invite_codes.rs +++ b/atrium-api/src/com/atproto/server/get_account_invite_codes.rs @@ -3,22 +3,20 @@ pub const NSID: &str = "com.atproto.server.getAccountInviteCodes"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Controls whether any new 'earned' but not 'created' invites should be created. #[serde(skip_serializing_if = "Option::is_none")] pub create_available: Option, #[serde(skip_serializing_if = "Option::is_none")] pub include_used: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub codes: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/get_service_auth.rs b/atrium-api/src/com/atproto/server/get_service_auth.rs index 67bbf716..2505f01d 100644 --- a/atrium-api/src/com/atproto/server/get_service_auth.rs +++ b/atrium-api/src/com/atproto/server/get_service_auth.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "com.atproto.server.getServiceAuth"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the service that the token will be used to authenticate with pub aud: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub token: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/get_session.rs b/atrium-api/src/com/atproto/server/get_session.rs index 814037b1..c738c56c 100644 --- a/atrium-api/src/com/atproto/server/get_session.rs +++ b/atrium-api/src/com/atproto/server/get_session.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.server.getSession"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub active: Option, pub did: crate::types::string::Did, @@ -19,9 +19,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/list_app_passwords.rs b/atrium-api/src/com/atproto/server/list_app_passwords.rs index b021a35e..220b38c8 100644 --- a/atrium-api/src/com/atproto/server/list_app_passwords.rs +++ b/atrium-api/src/com/atproto/server/list_app_passwords.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.server.listAppPasswords"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub passwords: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { @@ -28,11 +27,10 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct AppPassword { +pub struct AppPasswordData { pub created_at: crate::types::string::Datetime, pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub privileged: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type AppPassword = crate::types::Object; diff --git a/atrium-api/src/com/atproto/server/refresh_session.rs b/atrium-api/src/com/atproto/server/refresh_session.rs index 0d4828d2..35af09fb 100644 --- a/atrium-api/src/com/atproto/server/refresh_session.rs +++ b/atrium-api/src/com/atproto/server/refresh_session.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.server.refreshSession"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub access_jwt: String, #[serde(skip_serializing_if = "Option::is_none")] pub active: Option, @@ -15,9 +15,8 @@ pub struct Output { ///Hosting status of the account. If not specified, then assume 'active'. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/request_email_update.rs b/atrium-api/src/com/atproto/server/request_email_update.rs index ad51012b..690369c1 100644 --- a/atrium-api/src/com/atproto/server/request_email_update.rs +++ b/atrium-api/src/com/atproto/server/request_email_update.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.server.requestEmailUpdate"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub token_required: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/request_password_reset.rs b/atrium-api/src/com/atproto/server/request_password_reset.rs index cf3c4d74..d87ef3fb 100644 --- a/atrium-api/src/com/atproto/server/request_password_reset.rs +++ b/atrium-api/src/com/atproto/server/request_password_reset.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.server.requestPasswordReset"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub email: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/reserve_signing_key.rs b/atrium-api/src/com/atproto/server/reserve_signing_key.rs index f44ffc21..a11123ac 100644 --- a/atrium-api/src/com/atproto/server/reserve_signing_key.rs +++ b/atrium-api/src/com/atproto/server/reserve_signing_key.rs @@ -3,21 +3,19 @@ pub const NSID: &str = "com.atproto.server.reserveSigningKey"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///The DID to reserve a key for. #[serde(skip_serializing_if = "Option::is_none")] pub did: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { ///The public key for the reserved signing key, in did:key serialization. pub signing_key: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/reset_password.rs b/atrium-api/src/com/atproto/server/reset_password.rs index dcad0fa9..97c4b39b 100644 --- a/atrium-api/src/com/atproto/server/reset_password.rs +++ b/atrium-api/src/com/atproto/server/reset_password.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.server.resetPassword"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub password: String, pub token: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/server/revoke_app_password.rs b/atrium-api/src/com/atproto/server/revoke_app_password.rs index 3cabbf1d..c7b3d52f 100644 --- a/atrium-api/src/com/atproto/server/revoke_app_password.rs +++ b/atrium-api/src/com/atproto/server/revoke_app_password.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.server.revokeAppPassword"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub name: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/server/update_email.rs b/atrium-api/src/com/atproto/server/update_email.rs index b81e6aab..b6748fb0 100644 --- a/atrium-api/src/com/atproto/server/update_email.rs +++ b/atrium-api/src/com/atproto/server/update_email.rs @@ -3,16 +3,15 @@ pub const NSID: &str = "com.atproto.server.updateEmail"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub email: String, #[serde(skip_serializing_if = "Option::is_none")] pub email_auth_factor: Option, ///Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed. #[serde(skip_serializing_if = "Option::is_none")] pub token: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_blob.rs b/atrium-api/src/com/atproto/sync/get_blob.rs index 8b26dba3..c6f906b0 100644 --- a/atrium-api/src/com/atproto/sync/get_blob.rs +++ b/atrium-api/src/com/atproto/sync/get_blob.rs @@ -3,14 +3,13 @@ pub const NSID: &str = "com.atproto.sync.getBlob"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The CID of the blob to fetch pub cid: crate::types::string::Cid, ///The DID of the account. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_blocks.rs b/atrium-api/src/com/atproto/sync/get_blocks.rs index 64ca1bdb..b7f03e27 100644 --- a/atrium-api/src/com/atproto/sync/get_blocks.rs +++ b/atrium-api/src/com/atproto/sync/get_blocks.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.sync.getBlocks"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub cids: Vec, ///The DID of the repo. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_checkout.rs b/atrium-api/src/com/atproto/sync/get_checkout.rs index 96823612..415dfc86 100644 --- a/atrium-api/src/com/atproto/sync/get_checkout.rs +++ b/atrium-api/src/com/atproto/sync/get_checkout.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.sync.getCheckout"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the repo. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/sync/get_head.rs b/atrium-api/src/com/atproto/sync/get_head.rs index 0df9d88b..09a67262 100644 --- a/atrium-api/src/com/atproto/sync/get_head.rs +++ b/atrium-api/src/com/atproto/sync/get_head.rs @@ -3,19 +3,17 @@ pub const NSID: &str = "com.atproto.sync.getHead"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the repo. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub root: crate::types::string::Cid, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_latest_commit.rs b/atrium-api/src/com/atproto/sync/get_latest_commit.rs index d3d392df..b778b97c 100644 --- a/atrium-api/src/com/atproto/sync/get_latest_commit.rs +++ b/atrium-api/src/com/atproto/sync/get_latest_commit.rs @@ -3,20 +3,18 @@ pub const NSID: &str = "com.atproto.sync.getLatestCommit"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the repo. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub cid: crate::types::string::Cid, pub rev: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_record.rs b/atrium-api/src/com/atproto/sync/get_record.rs index 97a6c3f9..03893139 100644 --- a/atrium-api/src/com/atproto/sync/get_record.rs +++ b/atrium-api/src/com/atproto/sync/get_record.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.sync.getRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub collection: crate::types::string::Nsid, ///DEPRECATED: referenced a repo commit by CID, and retrieved record as of that commit #[serde(skip_serializing_if = "Option::is_none")] @@ -12,9 +12,8 @@ pub struct Parameters { pub did: crate::types::string::Did, ///Record Key pub rkey: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_repo.rs b/atrium-api/src/com/atproto/sync/get_repo.rs index 1edfac4a..64804bbc 100644 --- a/atrium-api/src/com/atproto/sync/get_repo.rs +++ b/atrium-api/src/com/atproto/sync/get_repo.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "com.atproto.sync.getRepo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the repo. pub did: crate::types::string::Did, ///The revision ('rev') of the repo to create a diff from. #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/get_repo_status.rs b/atrium-api/src/com/atproto/sync/get_repo_status.rs index 68edfb23..a0c43d8b 100644 --- a/atrium-api/src/com/atproto/sync/get_repo_status.rs +++ b/atrium-api/src/com/atproto/sync/get_repo_status.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "com.atproto.sync.getRepoStatus"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The DID of the repo. pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub active: bool, pub did: crate::types::string::Did, ///Optional field, the current rev of the repo, if active=true @@ -20,9 +19,8 @@ pub struct Output { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/list_blobs.rs b/atrium-api/src/com/atproto/sync/list_blobs.rs index 5fe865c0..54371033 100644 --- a/atrium-api/src/com/atproto/sync/list_blobs.rs +++ b/atrium-api/src/com/atproto/sync/list_blobs.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "com.atproto.sync.listBlobs"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, ///The DID of the repo. @@ -13,18 +13,16 @@ pub struct Parameters { ///Optional revision of the repo to list blobs since. #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub cids: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { diff --git a/atrium-api/src/com/atproto/sync/list_repos.rs b/atrium-api/src/com/atproto/sync/list_repos.rs index d3efcdaf..b4604ef7 100644 --- a/atrium-api/src/com/atproto/sync/list_repos.rs +++ b/atrium-api/src/com/atproto/sync/list_repos.rs @@ -3,23 +3,21 @@ pub const NSID: &str = "com.atproto.sync.listRepos"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub repos: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -30,7 +28,7 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Repo { +pub struct RepoData { #[serde(skip_serializing_if = "Option::is_none")] pub active: Option, pub did: crate::types::string::Did, @@ -40,6 +38,5 @@ pub struct Repo { ///If active=false, this optional field indicates a possible reason for why the account is not active. If active=false and no status is supplied, then the host makes no claim for why the repository is no longer being hosted. #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Repo = crate::types::Object; diff --git a/atrium-api/src/com/atproto/sync/notify_of_update.rs b/atrium-api/src/com/atproto/sync/notify_of_update.rs index b23c164c..be138437 100644 --- a/atrium-api/src/com/atproto/sync/notify_of_update.rs +++ b/atrium-api/src/com/atproto/sync/notify_of_update.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.sync.notifyOfUpdate"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Hostname of the current service (usually a PDS) that is notifying of update. pub hostname: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/sync/request_crawl.rs b/atrium-api/src/com/atproto/sync/request_crawl.rs index 25ab3263..ec7ee700 100644 --- a/atrium-api/src/com/atproto/sync/request_crawl.rs +++ b/atrium-api/src/com/atproto/sync/request_crawl.rs @@ -3,12 +3,11 @@ pub const NSID: &str = "com.atproto.sync.requestCrawl"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Hostname of the current service (eg, PDS) that is requesting to be crawled. pub hostname: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/sync/subscribe_repos.rs b/atrium-api/src/com/atproto/sync/subscribe_repos.rs index 746885a6..938a2d7e 100644 --- a/atrium-api/src/com/atproto/sync/subscribe_repos.rs +++ b/atrium-api/src/com/atproto/sync/subscribe_repos.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "com.atproto.sync.subscribeRepos"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///The last known event seq number to backfill from. #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error { @@ -39,7 +38,7 @@ impl std::fmt::Display for Error { ///Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Account { +pub struct AccountData { ///Indicates that the account has a repository which can be fetched from the host that emitted this event. pub active: bool, pub did: crate::types::string::Did, @@ -48,13 +47,12 @@ pub struct Account { #[serde(skip_serializing_if = "Option::is_none")] pub status: Option, pub time: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Account = crate::types::Object; ///Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Commit { +pub struct CommitData { pub blobs: Vec, ///CAR file containing relevant blocks, as a diff since the previous repo state. #[serde(with = "serde_bytes")] @@ -80,76 +78,69 @@ pub struct Commit { pub time: crate::types::string::Datetime, ///Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data. pub too_big: bool, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Commit = crate::types::Object; ///DEPRECATED -- Use #identity event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Handle { +pub struct HandleData { pub did: crate::types::string::Did, pub handle: crate::types::string::Handle, pub seq: i64, pub time: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Handle = crate::types::Object; ///Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Identity { +pub struct IdentityData { pub did: crate::types::string::Did, ///The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details. #[serde(skip_serializing_if = "Option::is_none")] pub handle: Option, pub seq: i64, pub time: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Identity = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Info { +pub struct InfoData { #[serde(skip_serializing_if = "Option::is_none")] pub message: Option, pub name: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Info = crate::types::Object; ///DEPRECATED -- Use #account event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Migrate { +pub struct MigrateData { pub did: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] pub migrate_to: Option, pub seq: i64, pub time: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Migrate = crate::types::Object; ///A repo operation, ie a mutation of a single record. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoOp { +pub struct RepoOpData { pub action: String, ///For creates and updates, the new record CID. For deletions, null. #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, pub path: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoOp = crate::types::Object; ///DEPRECATED -- Use #account event instead #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Tombstone { +pub struct TombstoneData { pub did: crate::types::string::Did, pub seq: i64, pub time: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Tombstone = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum Message { diff --git a/atrium-api/src/com/atproto/temp/check_signup_queue.rs b/atrium-api/src/com/atproto/temp/check_signup_queue.rs index 0afcfdf1..8571dd7b 100644 --- a/atrium-api/src/com/atproto/temp/check_signup_queue.rs +++ b/atrium-api/src/com/atproto/temp/check_signup_queue.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "com.atproto.temp.checkSignupQueue"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub activated: bool, #[serde(skip_serializing_if = "Option::is_none")] pub estimated_time_ms: Option, #[serde(skip_serializing_if = "Option::is_none")] pub place_in_queue: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/temp/fetch_labels.rs b/atrium-api/src/com/atproto/temp/fetch_labels.rs index 21da2410..b70cfa43 100644 --- a/atrium-api/src/com/atproto/temp/fetch_labels.rs +++ b/atrium-api/src/com/atproto/temp/fetch_labels.rs @@ -3,21 +3,19 @@ pub const NSID: &str = "com.atproto.temp.fetchLabels"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub limit: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub since: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub labels: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/com/atproto/temp/request_phone_verification.rs b/atrium-api/src/com/atproto/temp/request_phone_verification.rs index d946e853..61306905 100644 --- a/atrium-api/src/com/atproto/temp/request_phone_verification.rs +++ b/atrium-api/src/com/atproto/temp/request_phone_verification.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "com.atproto.temp.requestPhoneVerification"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub phone_number: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/communication/create_template.rs b/atrium-api/src/tools/ozone/communication/create_template.rs index 4f515d6f..50ab264e 100644 --- a/atrium-api/src/tools/ozone/communication/create_template.rs +++ b/atrium-api/src/tools/ozone/communication/create_template.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.communication.createTemplate"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Content of the template, markdown supported, can contain variable placeholders. pub content_markdown: String, ///DID of the user who is creating the template. @@ -13,9 +13,8 @@ pub struct Input { pub name: String, ///Subject of the message, used in emails. pub subject: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = crate::tools::ozone::communication::defs::TemplateView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/communication/defs.rs b/atrium-api/src/tools/ozone/communication/defs.rs index e7597a99..4957ac7a 100644 --- a/atrium-api/src/tools/ozone/communication/defs.rs +++ b/atrium-api/src/tools/ozone/communication/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `tools.ozone.communication.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct TemplateView { +pub struct TemplateViewData { ///Subject of the message, used in emails. pub content_markdown: String, pub created_at: crate::types::string::Datetime, @@ -16,6 +16,5 @@ pub struct TemplateView { #[serde(skip_serializing_if = "Option::is_none")] pub subject: Option, pub updated_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type TemplateView = crate::types::Object; diff --git a/atrium-api/src/tools/ozone/communication/delete_template.rs b/atrium-api/src/tools/ozone/communication/delete_template.rs index 157b9a10..7fa9cb6a 100644 --- a/atrium-api/src/tools/ozone/communication/delete_template.rs +++ b/atrium-api/src/tools/ozone/communication/delete_template.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "tools.ozone.communication.deleteTemplate"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub id: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/communication/list_templates.rs b/atrium-api/src/tools/ozone/communication/list_templates.rs index 28fe19a6..db978660 100644 --- a/atrium-api/src/tools/ozone/communication/list_templates.rs +++ b/atrium-api/src/tools/ozone/communication/list_templates.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "tools.ozone.communication.listTemplates"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { pub communication_templates: Vec< crate::tools::ozone::communication::defs::TemplateView, >, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/communication/update_template.rs b/atrium-api/src/tools/ozone/communication/update_template.rs index 732d6568..7dac6036 100644 --- a/atrium-api/src/tools/ozone/communication/update_template.rs +++ b/atrium-api/src/tools/ozone/communication/update_template.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.communication.updateTemplate"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { ///Content of the template, markdown supported, can contain variable placeholders. #[serde(skip_serializing_if = "Option::is_none")] pub content_markdown: Option, @@ -20,9 +20,8 @@ pub struct Input { ///DID of the user who is updating the template. #[serde(skip_serializing_if = "Option::is_none")] pub updated_by: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = crate::tools::ozone::communication::defs::TemplateView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/defs.rs b/atrium-api/src/tools/ozone/moderation/defs.rs index 882f743d..5989b6b7 100644 --- a/atrium-api/src/tools/ozone/moderation/defs.rs +++ b/atrium-api/src/tools/ozone/moderation/defs.rs @@ -2,7 +2,7 @@ //!Definitions for the `tools.ozone.moderation.defs` namespace. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct BlobView { +pub struct BlobViewData { pub cid: crate::types::string::Cid, pub created_at: crate::types::string::Datetime, #[serde(skip_serializing_if = "Option::is_none")] @@ -11,49 +11,44 @@ pub struct BlobView { #[serde(skip_serializing_if = "Option::is_none")] pub moderation: Option, pub size: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type BlobView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ImageDetails { +pub struct ImageDetailsData { pub height: i64, pub width: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ImageDetails = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventAcknowledge { +pub struct ModEventAcknowledgeData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventAcknowledge = crate::types::Object; ///Add a comment to a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventComment { +pub struct ModEventCommentData { pub comment: String, ///Make the comment persistent on the subject #[serde(skip_serializing_if = "Option::is_none")] pub sticky: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventComment = crate::types::Object; ///Divert a record's blobs to a 3rd party service for further scanning/tagging #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventDivert { +pub struct ModEventDivertData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventDivert = crate::types::Object; ///Keep a log of outgoing email to a user #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventEmail { +pub struct ModEventEmailData { ///Additional comment about the outgoing comm. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, @@ -62,87 +57,79 @@ pub struct ModEventEmail { pub content: Option, ///The subject line of the email sent to the user. pub subject_line: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventEmail = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventEscalate { +pub struct ModEventEscalateData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventEscalate = crate::types::Object; ///Apply/Negate labels on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventLabel { +pub struct ModEventLabelData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, pub create_label_vals: Vec, pub negate_label_vals: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventLabel = crate::types::Object; ///Mute incoming reports on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventMute { +pub struct ModEventMuteData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, ///Indicates how long the subject should remain muted. pub duration_in_hours: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventMute = crate::types::Object; ///Mute incoming reports from an account #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventMuteReporter { +pub struct ModEventMuteReporterData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, ///Indicates how long the account should remain muted. pub duration_in_hours: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventMuteReporter = crate::types::Object; ///Report a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventReport { +pub struct ModEventReportData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, ///Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject. #[serde(skip_serializing_if = "Option::is_none")] pub is_reporter_muted: Option, pub report_type: crate::com::atproto::moderation::defs::ReasonType, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventReport = crate::types::Object; ///Resolve appeal on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventResolveAppeal { +pub struct ModEventResolveAppealData { ///Describe resolution. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventResolveAppeal = crate::types::Object; ///Revert take down action on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventReverseTakedown { +pub struct ModEventReverseTakedownData { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventReverseTakedown = crate::types::Object; ///Add/Remove a tag on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventTag { +pub struct ModEventTagData { ///Tags to be added to the subject. If already exists, won't be duplicated. pub add: Vec, ///Additional comment about added/removed tags. @@ -150,44 +137,40 @@ pub struct ModEventTag { pub comment: Option, ///Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated. pub remove: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventTag = crate::types::Object; ///Take down a subject permanently or temporarily #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventTakedown { +pub struct ModEventTakedownData { #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, ///Indicates how long the takedown should be in effect before automatically expiring. #[serde(skip_serializing_if = "Option::is_none")] pub duration_in_hours: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventTakedown = crate::types::Object; ///Unmute action on a subject #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventUnmute { +pub struct ModEventUnmuteData { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventUnmute = crate::types::Object; ///Unmute incoming reports from an account #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventUnmuteReporter { +pub struct ModEventUnmuteReporterData { ///Describe reasoning behind the reversal. #[serde(skip_serializing_if = "Option::is_none")] pub comment: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventUnmuteReporter = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventView { +pub struct ModEventViewData { pub created_at: crate::types::string::Datetime, pub created_by: crate::types::string::Did, #[serde(skip_serializing_if = "Option::is_none")] @@ -198,40 +181,36 @@ pub struct ModEventView { pub subject_blob_cids: Vec, #[serde(skip_serializing_if = "Option::is_none")] pub subject_handle: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModEventViewDetail { +pub struct ModEventViewDetailData { pub created_at: crate::types::string::Datetime, pub created_by: crate::types::string::Did, pub event: crate::types::Union, pub id: i64, pub subject: crate::types::Union, pub subject_blobs: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModEventViewDetail = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Moderation { +pub struct ModerationData { #[serde(skip_serializing_if = "Option::is_none")] pub subject_status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Moderation = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ModerationDetail { +pub struct ModerationDetailData { #[serde(skip_serializing_if = "Option::is_none")] pub subject_status: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ModerationDetail = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RecordView { +pub struct RecordViewData { pub blob_cids: Vec, pub cid: crate::types::string::Cid, pub indexed_at: crate::types::string::Datetime, @@ -239,12 +218,11 @@ pub struct RecordView { pub repo: RepoView, pub uri: String, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RecordView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RecordViewDetail { +pub struct RecordViewDetailData { pub blobs: Vec, pub cid: crate::types::string::Cid, pub indexed_at: crate::types::string::Datetime, @@ -254,19 +232,17 @@ pub struct RecordViewDetail { pub repo: RepoView, pub uri: String, pub value: crate::records::Record, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RecordViewDetail = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RecordViewNotFound { +pub struct RecordViewNotFoundData { pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RecordViewNotFound = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoView { +pub struct RepoViewData { #[serde(skip_serializing_if = "Option::is_none")] pub deactivated_at: Option, pub did: crate::types::string::Did, @@ -282,12 +258,11 @@ pub struct RepoView { pub invites_disabled: Option, pub moderation: Moderation, pub related_records: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoViewDetail { +pub struct RepoViewDetailData { #[serde(skip_serializing_if = "Option::is_none")] pub deactivated_at: Option, pub did: crate::types::string::Did, @@ -309,16 +284,14 @@ pub struct RepoViewDetail { pub labels: Option>, pub moderation: ModerationDetail, pub related_records: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoViewDetail = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct RepoViewNotFound { +pub struct RepoViewNotFoundData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type RepoViewNotFound = crate::types::Object; ///Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed"; ///Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator @@ -330,7 +303,7 @@ pub const REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen"; pub type SubjectReviewState = String; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct SubjectStatusView { +pub struct SubjectStatusViewData { ///True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators. #[serde(skip_serializing_if = "Option::is_none")] pub appealed: Option, @@ -367,18 +340,16 @@ pub struct SubjectStatusView { pub takendown: Option, ///Timestamp referencing when the last update was made to the moderation status of the subject pub updated_at: crate::types::string::Datetime, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type SubjectStatusView = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct VideoDetails { +pub struct VideoDetailsData { pub height: i64, pub length: i64, pub width: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type VideoDetails = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "$type")] pub enum BlobViewDetailsRefs { diff --git a/atrium-api/src/tools/ozone/moderation/emit_event.rs b/atrium-api/src/tools/ozone/moderation/emit_event.rs index a169fc63..0633f011 100644 --- a/atrium-api/src/tools/ozone/moderation/emit_event.rs +++ b/atrium-api/src/tools/ozone/moderation/emit_event.rs @@ -3,15 +3,14 @@ pub const NSID: &str = "tools.ozone.moderation.emitEvent"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Input { +pub struct InputData { pub created_by: crate::types::string::Did, pub event: crate::types::Union, pub subject: crate::types::Union, #[serde(skip_serializing_if = "Option::is_none")] pub subject_blob_cids: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Input = crate::types::Object; pub type Output = crate::tools::ozone::moderation::defs::ModEventView; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/get_event.rs b/atrium-api/src/tools/ozone/moderation/get_event.rs index eb37495b..c654d0c6 100644 --- a/atrium-api/src/tools/ozone/moderation/get_event.rs +++ b/atrium-api/src/tools/ozone/moderation/get_event.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "tools.ozone.moderation.getEvent"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub id: i64, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; pub type Output = crate::tools::ozone::moderation::defs::ModEventViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/get_record.rs b/atrium-api/src/tools/ozone/moderation/get_record.rs index c68bf31f..a7742b35 100644 --- a/atrium-api/src/tools/ozone/moderation/get_record.rs +++ b/atrium-api/src/tools/ozone/moderation/get_record.rs @@ -3,13 +3,12 @@ pub const NSID: &str = "tools.ozone.moderation.getRecord"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cid: Option, pub uri: String, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; pub type Output = crate::tools::ozone::moderation::defs::RecordViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/get_repo.rs b/atrium-api/src/tools/ozone/moderation/get_repo.rs index d18d5636..9a432168 100644 --- a/atrium-api/src/tools/ozone/moderation/get_repo.rs +++ b/atrium-api/src/tools/ozone/moderation/get_repo.rs @@ -3,11 +3,10 @@ pub const NSID: &str = "tools.ozone.moderation.getRepo"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { pub did: crate::types::string::Did, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; pub type Output = crate::tools::ozone::moderation::defs::RepoViewDetail; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] diff --git a/atrium-api/src/tools/ozone/moderation/query_events.rs b/atrium-api/src/tools/ozone/moderation/query_events.rs index 5fa14775..6978d3da 100644 --- a/atrium-api/src/tools/ozone/moderation/query_events.rs +++ b/atrium-api/src/tools/ozone/moderation/query_events.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.moderation.queryEvents"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///If specified, only events where all of these labels were added are returned #[serde(skip_serializing_if = "Option::is_none")] pub added_labels: Option>, @@ -47,18 +47,16 @@ pub struct Parameters { ///The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent) to filter by. If not specified, all events are returned. #[serde(skip_serializing_if = "Option::is_none")] pub types: Option>, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub events: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/moderation/query_statuses.rs b/atrium-api/src/tools/ozone/moderation/query_statuses.rs index f899821d..1ffc065b 100644 --- a/atrium-api/src/tools/ozone/moderation/query_statuses.rs +++ b/atrium-api/src/tools/ozone/moderation/query_statuses.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.moderation.queryStatuses"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { ///Get subjects in unresolved appealed status #[serde(skip_serializing_if = "Option::is_none")] pub appealed: Option, @@ -53,18 +53,16 @@ pub struct Parameters { ///Get subjects that were taken down #[serde(skip_serializing_if = "Option::is_none")] pub takendown: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub subject_statuses: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/moderation/search_repos.rs b/atrium-api/src/tools/ozone/moderation/search_repos.rs index afec1c60..3eb9319d 100644 --- a/atrium-api/src/tools/ozone/moderation/search_repos.rs +++ b/atrium-api/src/tools/ozone/moderation/search_repos.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.moderation.searchRepos"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Parameters { +pub struct ParametersData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -13,18 +13,16 @@ pub struct Parameters { ///DEPRECATED: use 'q' instead #[serde(skip_serializing_if = "Option::is_none")] pub term: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Parameters = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub cursor: Option, pub repos: Vec, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} diff --git a/atrium-api/src/tools/ozone/server/get_config.rs b/atrium-api/src/tools/ozone/server/get_config.rs index 4f2fad24..a58555d6 100644 --- a/atrium-api/src/tools/ozone/server/get_config.rs +++ b/atrium-api/src/tools/ozone/server/get_config.rs @@ -3,7 +3,7 @@ pub const NSID: &str = "tools.ozone.server.getConfig"; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct Output { +pub struct OutputData { #[serde(skip_serializing_if = "Option::is_none")] pub appview: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -14,9 +14,8 @@ pub struct Output { pub pds: Option, #[serde(skip_serializing_if = "Option::is_none")] pub viewer: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type Output = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(tag = "error", content = "message")] pub enum Error {} @@ -27,17 +26,15 @@ impl std::fmt::Display for Error { } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ServiceConfig { +pub struct ServiceConfigData { #[serde(skip_serializing_if = "Option::is_none")] pub url: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ServiceConfig = crate::types::Object; #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct ViewerConfig { +pub struct ViewerConfigData { #[serde(skip_serializing_if = "Option::is_none")] pub role: Option, - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } +pub type ViewerConfig = crate::types::Object; diff --git a/atrium-api/src/types.rs b/atrium-api/src/types.rs index cd3d2176..73d1d2b4 100644 --- a/atrium-api/src/types.rs +++ b/atrium-api/src/types.rs @@ -3,6 +3,7 @@ use ipld_core::ipld::Ipld; use std::fmt; +use std::ops::{Deref, DerefMut}; mod cid_link; pub use cid_link::CidLink; @@ -13,8 +14,6 @@ pub use integer::*; pub mod string; use string::RecordKey; -pub const EMPTY_EXTRA_DATA: Ipld = Ipld::Map(std::collections::BTreeMap::new()); - /// Trait for a collection of records that can be stored in a repository. /// /// The records all have the same Lexicon schema. @@ -89,6 +88,38 @@ pub struct Blob { pub size: usize, // TODO } +/// A generic object type. +#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] +pub struct Object { + #[serde(flatten)] + pub data: T, + #[serde(flatten)] + pub extra_data: Ipld, +} + +impl From for Object { + fn from(data: T) -> Self { + Self { + data, + extra_data: Ipld::Map(std::collections::BTreeMap::new()), + } + } +} + +impl Deref for Object { + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.data + } +} + +impl DerefMut for Object { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.data + } +} + /// An "open" union type. #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(untagged)] @@ -98,7 +129,7 @@ pub enum Union { } /// The data of variants represented by a map and include a `$type` field indicating the variant type. -#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq)] +#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)] pub struct UnknownData { #[serde(rename = "$type")] pub r#type: String, @@ -106,8 +137,6 @@ pub struct UnknownData { pub data: Ipld, } -impl Eq for UnknownData {} - #[cfg(test)] mod tests { use super::*; diff --git a/atrium-cli/src/runner.rs b/atrium-cli/src/runner.rs index bda36e55..36686b1b 100644 --- a/atrium-cli/src/runner.rs +++ b/atrium-cli/src/runner.rs @@ -5,7 +5,7 @@ use atrium_api::agent::bluesky::{AtprotoServiceType, BSKY_CHAT_DID}; use atrium_api::agent::{store::SessionStore, AtpAgent}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::{AtIdentifier, Datetime, Handle}; -use atrium_api::types::{LimitedNonZeroU8, EMPTY_EXTRA_DATA}; +use atrium_api::types::LimitedNonZeroU8; use atrium_xrpc_client::reqwest::ReqwestClient; use serde::Serialize; use std::ffi::OsStr; @@ -58,12 +58,14 @@ impl Runner { .app .bsky .feed - .get_timeline(atrium_api::app::bsky::feed::get_timeline::Parameters { - algorithm: None, - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_timeline( + atrium_api::app::bsky::feed::get_timeline::ParametersData { + algorithm: None, + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetAuthorFeed(args) => self.print( @@ -73,16 +75,18 @@ impl Runner { .app .bsky .feed - .get_author_feed(atrium_api::app::bsky::feed::get_author_feed::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - cursor: None, - filter: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_author_feed( + atrium_api::app::bsky::feed::get_author_feed::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + cursor: None, + filter: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetLikes(args) => self.print( @@ -92,13 +96,15 @@ impl Runner { .app .bsky .feed - .get_likes(atrium_api::app::bsky::feed::get_likes::Parameters { - cid: None, - cursor: None, - limit: Some(limit), - uri: args.uri.to_string(), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_likes( + atrium_api::app::bsky::feed::get_likes::ParametersData { + cid: None, + cursor: None, + limit: Some(limit), + uri: args.uri.to_string(), + } + .into(), + ) .await?, ), Command::GetRepostedBy(args) => self.print( @@ -108,13 +114,15 @@ impl Runner { .app .bsky .feed - .get_reposted_by(atrium_api::app::bsky::feed::get_reposted_by::Parameters { - cid: None, - cursor: None, - limit: Some(limit), - uri: args.uri.to_string(), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_reposted_by( + atrium_api::app::bsky::feed::get_reposted_by::ParametersData { + cid: None, + cursor: None, + limit: Some(limit), + uri: args.uri.to_string(), + } + .into(), + ) .await?, ), Command::GetActorFeeds(args) => self.print( @@ -124,15 +132,17 @@ impl Runner { .app .bsky .feed - .get_actor_feeds(atrium_api::app::bsky::feed::get_actor_feeds::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_actor_feeds( + atrium_api::app::bsky::feed::get_actor_feeds::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetFeed(args) => self.print( @@ -142,12 +152,14 @@ impl Runner { .app .bsky .feed - .get_feed(atrium_api::app::bsky::feed::get_feed::Parameters { - cursor: None, - feed: args.uri.to_string(), - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_feed( + atrium_api::app::bsky::feed::get_feed::ParametersData { + cursor: None, + feed: args.uri.to_string(), + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetListFeed(args) => self.print( @@ -157,12 +169,14 @@ impl Runner { .app .bsky .feed - .get_list_feed(atrium_api::app::bsky::feed::get_list_feed::Parameters { - cursor: None, - limit: Some(limit), - list: args.uri.to_string(), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_list_feed( + atrium_api::app::bsky::feed::get_list_feed::ParametersData { + cursor: None, + limit: Some(limit), + list: args.uri.to_string(), + } + .into(), + ) .await?, ), Command::GetFollows(args) => self.print( @@ -172,15 +186,17 @@ impl Runner { .app .bsky .graph - .get_follows(atrium_api::app::bsky::graph::get_follows::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_follows( + atrium_api::app::bsky::graph::get_follows::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetFollowers(args) => self.print( @@ -190,15 +206,17 @@ impl Runner { .app .bsky .graph - .get_followers(atrium_api::app::bsky::graph::get_followers::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_followers( + atrium_api::app::bsky::graph::get_followers::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetLists(args) => self.print( @@ -208,15 +226,17 @@ impl Runner { .app .bsky .graph - .get_lists(atrium_api::app::bsky::graph::get_lists::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_lists( + atrium_api::app::bsky::graph::get_lists::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::GetList(args) => self.print( @@ -226,12 +246,14 @@ impl Runner { .app .bsky .graph - .get_list(atrium_api::app::bsky::graph::get_list::Parameters { - cursor: None, - limit: Some(limit), - list: args.uri.to_string(), - extra_data: EMPTY_EXTRA_DATA, - }) + .get_list( + atrium_api::app::bsky::graph::get_list::ParametersData { + cursor: None, + limit: Some(limit), + list: args.uri.to_string(), + } + .into(), + ) .await?, ), Command::GetProfile(args) => self.print( @@ -241,13 +263,15 @@ impl Runner { .app .bsky .actor - .get_profile(atrium_api::app::bsky::actor::get_profile::Parameters { - actor: args - .actor - .or(self.handle.clone().map(AtIdentifier::Handle)) - .with_context(|| "Not logged in")?, - extra_data: EMPTY_EXTRA_DATA, - }) + .get_profile( + atrium_api::app::bsky::actor::get_profile::ParametersData { + actor: args + .actor + .or(self.handle.clone().map(AtIdentifier::Handle)) + .with_context(|| "Not logged in")?, + } + .into(), + ) .await?, ), Command::GetPreferences => self.print( @@ -257,9 +281,9 @@ impl Runner { .app .bsky .actor - .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters { - extra_data: EMPTY_EXTRA_DATA, - }) + .get_preferences( + atrium_api::app::bsky::actor::get_preferences::ParametersData {}.into(), + ) .await?, ), Command::ListNotifications => self.print( @@ -270,12 +294,12 @@ impl Runner { .bsky .notification .list_notifications( - atrium_api::app::bsky::notification::list_notifications::Parameters { + atrium_api::app::bsky::notification::list_notifications::ParametersData { cursor: None, limit: Some(limit), seen_at: None, - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), ) .await?, ), @@ -289,30 +313,32 @@ impl Runner { .chat .bsky .convo - .list_convos(atrium_api::chat::bsky::convo::list_convos::Parameters { - cursor: None, - limit: Some(limit), - extra_data: EMPTY_EXTRA_DATA, - }) + .list_convos( + atrium_api::chat::bsky::convo::list_convos::ParametersData { + cursor: None, + limit: Some(limit), + } + .into(), + ) .await?, ), Command::SendConvoMessage(args) => { let did = match args.actor { - AtIdentifier::Handle(handle) => { - self.agent - .api - .com - .atproto - .identity - .resolve_handle( - atrium_api::com::atproto::identity::resolve_handle::Parameters { - handle: handle.clone(), - extra_data: EMPTY_EXTRA_DATA, - }, - ) - .await? - .did - } + AtIdentifier::Handle(handle) => self + .agent + .api + .com + .atproto + .identity + .resolve_handle( + atrium_api::com::atproto::identity::resolve_handle::ParametersData { + handle: handle.clone(), + } + .into(), + ) + .await? + .did + .clone(), AtIdentifier::Did(did) => did, }; let chat = &self @@ -326,26 +352,28 @@ impl Runner { .bsky .convo .get_convo_for_members( - atrium_api::chat::bsky::convo::get_convo_for_members::Parameters { + atrium_api::chat::bsky::convo::get_convo_for_members::ParametersData { members: vec![did], - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), ) .await?; self.print( &chat .bsky .convo - .send_message(atrium_api::chat::bsky::convo::send_message::Input { - convo_id: convo.convo.id, - message: atrium_api::chat::bsky::convo::defs::MessageInput { - embed: None, - facets: None, - text: args.text, - extra_data: EMPTY_EXTRA_DATA, - }, - extra_data: EMPTY_EXTRA_DATA, - }) + .send_message( + atrium_api::chat::bsky::convo::send_message::InputData { + convo_id: convo.convo.id.clone(), + message: atrium_api::chat::bsky::convo::defs::MessageInputData { + embed: None, + facets: None, + text: args.text, + } + .into(), + } + .into(), + ) .await?, ) } @@ -364,24 +392,23 @@ impl Runner { .upload_blob(buf) .await .expect("upload blob"); - images.push(atrium_api::app::bsky::embed::images::Image { - alt: image - .file_name() - .map(OsStr::to_string_lossy) - .unwrap_or_default() - .into(), - aspect_ratio: None, - image: output.blob, - extra_data: EMPTY_EXTRA_DATA, - }) + images.push( + atrium_api::app::bsky::embed::images::ImageData { + alt: image + .file_name() + .map(OsStr::to_string_lossy) + .unwrap_or_default() + .into(), + aspect_ratio: None, + image: output.blob.clone(), + } + .into(), + ) } } let embed = Some(atrium_api::types::Union::Refs( atrium_api::app::bsky::feed::post::RecordEmbedRefs::AppBskyEmbedImagesMain( - Box::new(atrium_api::app::bsky::embed::images::Main { - images, - extra_data: EMPTY_EXTRA_DATA, - }), + Box::new(atrium_api::app::bsky::embed::images::MainData { images }.into()), ), )); self.print( @@ -391,28 +418,30 @@ impl Runner { .com .atproto .repo - .create_record(atrium_api::com::atproto::repo::create_record::Input { - collection: "app.bsky.feed.post".parse().expect("valid"), - record: Record::Known(KnownRecord::AppBskyFeedPost(Box::new( - atrium_api::app::bsky::feed::post::Record { - created_at: Datetime::now(), - embed, - entities: None, - facets: None, - labels: None, - langs: None, - reply: None, - tags: None, - text: args.text, - extra_data: EMPTY_EXTRA_DATA, - }, - ))), - repo: self.handle.clone().with_context(|| "Not logged in")?.into(), - rkey: None, - swap_commit: None, - validate: None, - extra_data: EMPTY_EXTRA_DATA, - }) + .create_record( + atrium_api::com::atproto::repo::create_record::InputData { + collection: "app.bsky.feed.post".parse().expect("valid"), + record: Record::Known(KnownRecord::AppBskyFeedPost(Box::new( + atrium_api::app::bsky::feed::post::RecordData { + created_at: Datetime::now(), + embed, + entities: None, + facets: None, + labels: None, + langs: None, + reply: None, + tags: None, + text: args.text, + } + .into(), + ))), + repo: self.handle.clone().with_context(|| "Not logged in")?.into(), + rkey: None, + swap_commit: None, + validate: None, + } + .into(), + ) .await?, ) } @@ -423,14 +452,16 @@ impl Runner { .com .atproto .repo - .delete_record(atrium_api::com::atproto::repo::delete_record::Input { - collection: "app.bsky.feed.post".parse().expect("valid"), - repo: self.handle.clone().with_context(|| "Not logged in")?.into(), - rkey: args.uri.rkey, - swap_commit: None, - swap_record: None, - extra_data: EMPTY_EXTRA_DATA, - }) + .delete_record( + atrium_api::com::atproto::repo::delete_record::InputData { + collection: "app.bsky.feed.post".parse().expect("valid"), + repo: self.handle.clone().with_context(|| "Not logged in")?.into(), + rkey: args.uri.rkey, + swap_commit: None, + swap_record: None, + } + .into(), + ) .await?, ), } diff --git a/bsky-sdk/src/agent.rs b/bsky-sdk/src/agent.rs index 008539d9..bc289ec7 100644 --- a/bsky-sdk/src/agent.rs +++ b/bsky-sdk/src/agent.rs @@ -11,7 +11,7 @@ use crate::preference::{FeedViewPreference, Preferences}; use atrium_api::agent::store::MemorySessionStore; use atrium_api::agent::{store::SessionStore, AtpAgent}; use atrium_api::app::bsky::actor::defs::{LabelersPref, PreferencesItem}; -use atrium_api::types::{Union, EMPTY_EXTRA_DATA}; +use atrium_api::types::Union; use atrium_api::xrpc::XrpcClient; #[cfg(feature = "default-client")] use atrium_xrpc_client::reqwest::ReqwestClient; @@ -92,17 +92,16 @@ where .push(ModerationPrefsLabeler::default()); } let mut label_prefs = Vec::new(); - for pref in self + let output = self .api .app .bsky .actor - .get_preferences(atrium_api::app::bsky::actor::get_preferences::Parameters { - extra_data: EMPTY_EXTRA_DATA, - }) - .await? - .preferences - { + .get_preferences( + atrium_api::app::bsky::actor::get_preferences::ParametersData {}.into(), + ) + .await?; + for pref in &output.preferences { match pref { Union::Refs(PreferencesItem::AdultContentPref(p)) => { prefs.moderation_prefs.adult_content_enabled = p.enabled; @@ -111,7 +110,7 @@ where label_prefs.push(p); } Union::Refs(PreferencesItem::SavedFeedsPrefV2(p)) => { - prefs.saved_feeds = p.items; + prefs.saved_feeds = p.items.clone(); } Union::Refs(PreferencesItem::FeedViewPref(p)) => { let mut pref = FeedViewPreference::default(); @@ -130,22 +129,22 @@ where if let Some(v) = p.hide_quote_posts { pref.hide_quote_posts = v; } - prefs.feed_view_prefs.insert(p.feed, pref); + prefs.feed_view_prefs.insert(p.feed.clone(), pref); } Union::Refs(PreferencesItem::MutedWordsPref(p)) => { - prefs.moderation_prefs.muted_words = p.items; + prefs.moderation_prefs.muted_words = p.items.clone(); } Union::Refs(PreferencesItem::HiddenPostsPref(p)) => { - prefs.moderation_prefs.hidden_posts = p.items; + prefs.moderation_prefs.hidden_posts = p.items.clone(); } Union::Unknown(u) => { if u.r#type == "app.bsky.actor.defs#labelersPref" { prefs.moderation_prefs.labelers.extend( - from_ipld::(u.data)? + from_ipld::(u.data.clone())? .labelers - .into_iter() + .iter() .map(|item| ModerationPrefsLabeler { - did: item.did, + did: item.did.clone(), labels: HashMap::default(), is_default_labeler: false, }), @@ -158,21 +157,21 @@ where } } for pref in label_prefs { - if let Some(did) = pref.labeler_did { + if let Some(did) = &pref.labeler_did { if let Some(l) = prefs .moderation_prefs .labelers .iter_mut() - .find(|l| l.did == did) + .find(|l| &l.did == did) { l.labels.insert( - pref.label, + pref.label.clone(), pref.visibility.parse().expect("invalid visibility"), ); } } else { prefs.moderation_prefs.labels.insert( - pref.label, + pref.label.clone(), pref.visibility.parse().expect("invalid visibility"), ); } @@ -197,25 +196,26 @@ where } /// Make a [`Moderator`] instance with the provided [`Preferences`]. pub async fn moderator(&self, preferences: &Preferences) -> Result { - let labelers = self + let output = self .api .app .bsky .labeler - .get_services(atrium_api::app::bsky::labeler::get_services::Parameters { - detailed: Some(true), - dids: preferences - .moderation_prefs - .labelers - .iter() - .map(|labeler| labeler.did.clone()) - .collect(), - extra_data: EMPTY_EXTRA_DATA, - }) - .await? - .views; - let mut label_defs = HashMap::with_capacity(labelers.len()); - for labeler in &labelers { + .get_services( + atrium_api::app::bsky::labeler::get_services::ParametersData { + detailed: Some(true), + dids: preferences + .moderation_prefs + .labelers + .iter() + .map(|labeler| labeler.did.clone()) + .collect(), + } + .into(), + ) + .await?; + let mut label_defs = HashMap::with_capacity(output.views.len()); + for labeler in &output.views { let Union::Refs(atrium_api::app::bsky::labeler::get_services::OutputViewsItem::AppBskyLabelerDefsLabelerViewDetailed(labeler_view)) = labeler else { continue; }; @@ -225,7 +225,7 @@ where ); } Ok(Moderator::new( - self.get_session().await.map(|s| s.did), + self.get_session().await.map(|s| s.did.clone()), preferences.moderation_prefs.clone(), label_defs, )) diff --git a/bsky-sdk/src/agent/builder.rs b/bsky-sdk/src/agent/builder.rs index 06532fc2..21dd7251 100644 --- a/bsky-sdk/src/agent/builder.rs +++ b/bsky-sdk/src/agent/builder.rs @@ -116,10 +116,10 @@ mod tests { use super::*; use async_trait::async_trait; use atrium_api::agent::Session; - use atrium_api::types::EMPTY_EXTRA_DATA; + use atrium_api::com::atproto::server::create_session::OutputData; fn session() -> Session { - Session { + OutputData { access_jwt: String::new(), active: None, did: "did:fake:handle.test".parse().expect("invalid did"), @@ -130,8 +130,8 @@ mod tests { handle: "handle.test".parse().expect("invalid handle"), refresh_jwt: String::new(), status: None, - extra_data: EMPTY_EXTRA_DATA, } + .into() } struct MockSessionStore; @@ -162,7 +162,10 @@ mod tests { .await?; assert_eq!(agent.get_endpoint().await, "https://bsky.social"); assert_eq!( - agent.get_session().await.map(|session| session.handle), + agent + .get_session() + .await + .map(|session| session.handle.clone()), Some("handle.test".parse().expect("invalid handle")) ); } diff --git a/bsky-sdk/src/moderation/tests.rs b/bsky-sdk/src/moderation/tests.rs index 57c07582..1595f989 100644 --- a/bsky-sdk/src/moderation/tests.rs +++ b/bsky-sdk/src/moderation/tests.rs @@ -7,12 +7,11 @@ use crate::moderation::decision::{DecisionContext, ModerationDecision}; use crate::moderation::types::*; use crate::moderation::util::interpret_label_value_definition; use crate::moderation::Moderator; -use atrium_api::app::bsky::actor::defs::ProfileViewBasic; -use atrium_api::app::bsky::feed::defs::PostView; -use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinition}; +use atrium_api::app::bsky::actor::defs::{ProfileViewBasic, ProfileViewBasicData}; +use atrium_api::app::bsky::feed::defs::{PostView, PostViewData}; +use atrium_api::com::atproto::label::defs::{Label, LabelData, LabelValueDefinitionData}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::Datetime; -use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; const FAKE_CID: &str = "bafyreiclp443lavogvhj3d2ob2cxbfuscni2k5jk7bebjzg7khl3esabwq"; @@ -58,7 +57,7 @@ fn profile_view_basic( display_name: Option<&str>, labels: Option>, ) -> ProfileViewBasic { - ProfileViewBasic { + ProfileViewBasicData { associated: None, avatar: None, did: format!("did:web:{handle}").parse().expect("invalid did"), @@ -66,12 +65,12 @@ fn profile_view_basic( handle: handle.parse().expect("invalid handle"), labels, viewer: None, - extra_data: EMPTY_EXTRA_DATA, } + .into() } fn post_view(author: &ProfileViewBasic, text: &str, labels: Option>) -> PostView { - PostView { + PostViewData { author: author.clone(), cid: FAKE_CID.parse().expect("invalid cid"), embed: None, @@ -79,7 +78,7 @@ fn post_view(author: &ProfileViewBasic, text: &str, labels: Option>) labels, like_count: None, record: Record::Known(KnownRecord::AppBskyFeedPost(Box::new( - atrium_api::app::bsky::feed::post::Record { + atrium_api::app::bsky::feed::post::RecordData { created_at: Datetime::now(), embed: None, entities: None, @@ -89,20 +88,20 @@ fn post_view(author: &ProfileViewBasic, text: &str, labels: Option>) reply: None, tags: None, text: text.into(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), ))), reply_count: None, repost_count: None, threadgate: None, uri: format!("at://{}/app.bsky.feed.post/fake", author.did.as_ref()), viewer: None, - extra_data: EMPTY_EXTRA_DATA, } + .into() } fn label(src: &str, uri: &str, val: &str) -> Label { - Label { + LabelData { cid: None, cts: Datetime::now(), exp: None, @@ -112,8 +111,8 @@ fn label(src: &str, uri: &str, val: &str) -> Label { uri: uri.into(), val: val.into(), ver: None, - extra_data: EMPTY_EXTRA_DATA, } + .into() } fn assert_ui(decision: &ModerationDecision, expected: &[ResultFlag], context: DecisionContext) { @@ -324,15 +323,15 @@ fn prioritize_custom_labels() { HashMap::from_iter([( "did:web:labeler.test".parse().expect("invalid did"), vec![interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("porn"), default_setting: Some(String::from("warn")), severity: String::from("inform"), blurs: String::from("none"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition")], @@ -374,15 +373,15 @@ fn does_not_override_imperative_labels() { HashMap::from_iter([( "did:web:labeler.test".parse().expect("invalid did"), vec![interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("!hide"), default_setting: Some(String::from("warn")), severity: String::from("inform"), blurs: String::from("none"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition")], @@ -430,28 +429,28 @@ fn ignore_invalid_label_value_names() { "did:web:labeler.test".parse().expect("invalid did"), vec![ interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("BadLabel"), default_setting: Some(String::from("warn")), severity: String::from("inform"), blurs: String::from("content"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition"), interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("bad/label"), default_setting: Some(String::from("warn")), severity: String::from("inform"), blurs: String::from("content"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition"), @@ -497,41 +496,41 @@ fn custom_labels_with_default_settings() { "did:web:labeler.test".parse().expect("invalid did"), vec![ interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("default-hide"), default_setting: Some(String::from("hide")), severity: String::from("inform"), blurs: String::from("content"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition"), interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("default-warn"), default_setting: Some(String::from("warn")), severity: String::from("inform"), blurs: String::from("content"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition"), interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("default-ignore"), default_setting: Some(String::from("ignore")), severity: String::from("inform"), blurs: String::from("content"), adult_only: None, locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition"), @@ -610,15 +609,15 @@ fn custom_labels_require_adult_content_enabled() { HashMap::from_iter([( "did:web:labeler.test".parse().expect("invalid did"), vec![interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { identifier: String::from("adult"), default_setting: Some(String::from("hide")), severity: String::from("inform"), blurs: String::from("content"), adult_only: Some(true), locales: Vec::new(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), ) .expect("invalid label value definition")], diff --git a/bsky-sdk/src/moderation/tests/behaviors.rs b/bsky-sdk/src/moderation/tests/behaviors.rs index aa3ec4b2..fefd85e5 100644 --- a/bsky-sdk/src/moderation/tests/behaviors.rs +++ b/bsky-sdk/src/moderation/tests/behaviors.rs @@ -3,14 +3,13 @@ use super::{ExpectedBehaviors, ResultFlag, FAKE_CID}; use crate::moderation::decision::DecisionContext; use crate::moderation::types::*; use crate::moderation::Moderator; -use atrium_api::app::bsky::actor::defs::{ProfileViewBasic, ViewerState}; -use atrium_api::app::bsky::graph::defs::{ListPurpose, ListViewBasic}; +use atrium_api::app::bsky::actor::defs::{ProfileViewBasic, ViewerState, ViewerStateData}; +use atrium_api::app::bsky::graph::defs::{ListPurpose, ListViewBasic, ListViewBasicData}; use atrium_api::types::string::Datetime; -use atrium_api::types::EMPTY_EXTRA_DATA; use std::collections::HashMap; fn list_view_basic(name: &str) -> ListViewBasic { - ListViewBasic { + ListViewBasicData { avatar: None, cid: FAKE_CID.parse().expect("invalid cid"), indexed_at: Some(Datetime::now()), @@ -19,8 +18,8 @@ fn list_view_basic(name: &str) -> ListViewBasic { purpose: ListPurpose::from("app.bsky.graph.defs#modlist"), uri: String::from("at://did:plc:fake/app.bsky.graph.list/fake"), viewer: None, - extra_data: EMPTY_EXTRA_DATA, } + .into() } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -102,7 +101,7 @@ impl TestUser { }, _ => Definition::default(), }; - ViewerState { + ViewerStateData { blocked_by: if def.blocked_by { Some(true) } else { None }, blocking: if def.blocking || def.blocking_by_list { Some(String::from( @@ -129,8 +128,8 @@ impl TestUser { } else { None }, - extra_data: EMPTY_EXTRA_DATA, } + .into() } } diff --git a/bsky-sdk/src/moderation/tests/custom_labels.rs b/bsky-sdk/src/moderation/tests/custom_labels.rs index 4c274618..71aea285 100644 --- a/bsky-sdk/src/moderation/tests/custom_labels.rs +++ b/bsky-sdk/src/moderation/tests/custom_labels.rs @@ -5,8 +5,7 @@ use crate::moderation::error::Result; use crate::moderation::types::*; use crate::moderation::util::interpret_label_value_definition; use crate::moderation::Moderator; -use atrium_api::com::atproto::label::defs::LabelValueDefinition; -use atrium_api::types::EMPTY_EXTRA_DATA; +use atrium_api::com::atproto::label::defs::LabelValueDefinitionData; use std::collections::HashMap; #[derive(Debug)] @@ -90,15 +89,15 @@ impl Scenario { HashMap::from_iter([( "did:web:labeler.test".parse().expect("invalid did"), vec![interpret_label_value_definition( - &LabelValueDefinition { + &LabelValueDefinitionData { adult_only: None, blurs: self.blurs.as_ref().to_string(), default_setting: Some(LabelPreference::Warn.as_ref().to_string()), identifier: String::from("custom"), locales: Vec::new(), severity: self.severity.as_ref().to_string(), - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), Some("did:web:labeler.test".parse().expect("invalid did")), )?], )]), diff --git a/bsky-sdk/src/moderation/tests/mutewords.rs b/bsky-sdk/src/moderation/tests/mutewords.rs index 6b78cc94..02ee1bfa 100644 --- a/bsky-sdk/src/moderation/tests/mutewords.rs +++ b/bsky-sdk/src/moderation/tests/mutewords.rs @@ -1,16 +1,15 @@ use super::{post_view, profile_view_basic}; use crate::moderation::decision::DecisionContext; use crate::moderation::{ModerationPrefs, Moderator}; -use atrium_api::app::bsky::actor::defs::MutedWord; -use atrium_api::types::EMPTY_EXTRA_DATA; +use atrium_api::app::bsky::actor::defs::{MutedWord, MutedWordData}; use std::collections::HashMap; fn muted_word(target: &str, value: &str) -> MutedWord { - MutedWord { + MutedWordData { targets: vec![String::from(target)], value: String::from(value), - extra_data: EMPTY_EXTRA_DATA, } + .into() } #[cfg(feature = "rich-text")] diff --git a/bsky-sdk/src/moderation/tests/quoteposts.rs b/bsky-sdk/src/moderation/tests/quoteposts.rs index d7257b93..fcd2551e 100644 --- a/bsky-sdk/src/moderation/tests/quoteposts.rs +++ b/bsky-sdk/src/moderation/tests/quoteposts.rs @@ -6,12 +6,12 @@ use crate::moderation::types::*; use crate::moderation::util::interpret_label_value_definition; use crate::moderation::Moderator; use atrium_api::app::bsky::actor::defs::ProfileViewBasic; -use atrium_api::app::bsky::embed::record::{View, ViewRecord, ViewRecordRefs}; +use atrium_api::app::bsky::embed::record::{ViewData, ViewRecordData, ViewRecordRefs}; use atrium_api::app::bsky::feed::defs::{PostView, PostViewEmbedRefs}; -use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinition}; +use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinitionData}; use atrium_api::records::{KnownRecord, Record}; use atrium_api::types::string::Datetime; -use atrium_api::types::{Union, EMPTY_EXTRA_DATA}; +use atrium_api::types::Union; use std::collections::HashMap; fn embed_record_view( @@ -19,22 +19,26 @@ fn embed_record_view( record: &atrium_api::app::bsky::feed::post::Record, labels: Option>, ) -> Union { - Union::Refs(PostViewEmbedRefs::AppBskyEmbedRecordView(Box::new(View { - record: Union::Refs(ViewRecordRefs::ViewRecord(Box::new(ViewRecord { - author: author.clone(), - cid: FAKE_CID.parse().expect("invalid cid"), - embeds: None, - indexed_at: Datetime::now(), - labels, - like_count: None, - reply_count: None, - repost_count: None, - uri: format!("at://{}/app.bsky.feed.post/fake", author.did.as_ref()), - value: Record::Known(KnownRecord::AppBskyFeedPost(Box::new(record.clone()))), - extra_data: EMPTY_EXTRA_DATA, - }))), - extra_data: EMPTY_EXTRA_DATA, - }))) + Union::Refs(PostViewEmbedRefs::AppBskyEmbedRecordView(Box::new( + ViewData { + record: Union::Refs(ViewRecordRefs::ViewRecord(Box::new( + ViewRecordData { + author: author.clone(), + cid: FAKE_CID.parse().expect("invalid cid"), + embeds: None, + indexed_at: Datetime::now(), + labels, + like_count: None, + reply_count: None, + repost_count: None, + uri: format!("at://{}/app.bsky.feed.post/fake", author.did.as_ref()), + value: Record::Known(KnownRecord::AppBskyFeedPost(Box::new(record.clone()))), + } + .into(), + ))), + } + .into(), + ))) } fn quoted_post(profile_labels: Option>, post_labels: Option>) -> PostView { @@ -45,7 +49,7 @@ fn quoted_post(profile_labels: Option>, post_labels: Option>, post_labels: Option= facet.index.byte_end { // delete slice (will get removed in final pass) - facet.index = Self::BYTE_SLICE_ZERO; + facet.index = Self::BYTE_SLICE_ZERO.into(); } // scenario B (entirely after) else if start_index > facet.index.byte_end { @@ -236,16 +237,12 @@ impl RichText { match feature { FacetFeaturesItem::Mention(mention) => { let did = agent.api.com.atproto.identity.resolve_handle( - atrium_api::com::atproto::identity::resolve_handle::Parameters { + atrium_api::com::atproto::identity::resolve_handle::ParametersData { handle: mention.handle.parse().expect("invalid handle"), - extra_data: EMPTY_EXTRA_DATA, - } - ).await?.did; + }.into() + ).await?.did.clone(); features.push(Union::Refs(MainFeaturesItem::Mention(Box::new( - Mention { - did, - extra_data: EMPTY_EXTRA_DATA, - }, + MentionData { did }.into(), )))); } FacetFeaturesItem::Link(link) => { @@ -256,11 +253,13 @@ impl RichText { } } } - facets.push(atrium_api::app::bsky::richtext::facet::Main { - features, - index: facet_without_resolution.index, - extra_data: EMPTY_EXTRA_DATA, - }); + facets.push( + atrium_api::app::bsky::richtext::facet::MainData { + features, + index: facet_without_resolution.index, + } + .into(), + ); } Some(facets) }; diff --git a/bsky-sdk/src/rich_text/detection.rs b/bsky-sdk/src/rich_text/detection.rs index adbd3dec..adbc0e2a 100644 --- a/bsky-sdk/src/rich_text/detection.rs +++ b/bsky-sdk/src/rich_text/detection.rs @@ -1,5 +1,6 @@ -use atrium_api::app::bsky::richtext::facet::{ByteSlice, Link, Tag}; -use atrium_api::types::EMPTY_EXTRA_DATA; +use atrium_api::app::bsky::richtext::facet::{ + ByteSlice, ByteSliceData, Link, LinkData, Tag, TagData, +}; use psl; use regex::Regex; use std::sync::OnceLock; @@ -44,11 +45,11 @@ pub fn detect_facets(text: &str) -> Vec { handle: m.as_str().into(), }, ))], - index: ByteSlice { + index: ByteSliceData { byte_end: m.end(), byte_start: m.start() - 1, - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), }); } } @@ -72,10 +73,9 @@ pub fn detect_facets(text: &str) -> Vec { } else { m.as_str().into() }; - let mut index = ByteSlice { + let mut index = ByteSliceData { byte_end: m.end(), byte_start: m.start(), - extra_data: EMPTY_EXTRA_DATA, }; // strip ending puncuation if (RE_ENDING_PUNCTUATION @@ -87,11 +87,8 @@ pub fn detect_facets(text: &str) -> Vec { index.byte_end -= 1; } facets.push(FacetWithoutResolution { - features: vec![FacetFeaturesItem::Link(Box::new(Link { - uri, - extra_data: EMPTY_EXTRA_DATA, - }))], - index, + features: vec![FacetFeaturesItem::Link(Box::new(LinkData { uri }.into()))], + index: index.into(), }); } } @@ -117,16 +114,15 @@ pub fn detect_facets(text: &str) -> Vec { continue; } let leading = capture.get(1).expect("invalid capture"); - let index = ByteSlice { + let index = ByteSliceData { byte_end: leading.end() + tag.len(), byte_start: leading.start(), - extra_data: EMPTY_EXTRA_DATA, - }; + } + .into(); facets.push(FacetWithoutResolution { - features: vec![FacetFeaturesItem::Tag(Box::new(Tag { - tag: tag.into(), - extra_data: EMPTY_EXTRA_DATA, - }))], + features: vec![FacetFeaturesItem::Tag(Box::new( + TagData { tag: tag.into() }.into(), + ))], index, }); } diff --git a/bsky-sdk/src/rich_text/tests.rs b/bsky-sdk/src/rich_text/tests.rs index 9865dafe..c1ad05a2 100644 --- a/bsky-sdk/src/rich_text/tests.rs +++ b/bsky-sdk/src/rich_text/tests.rs @@ -3,8 +3,10 @@ mod detection; use crate::error::Result; use crate::rich_text::{RichText, RichTextSegment}; use crate::tests::MockClient; -use atrium_api::app::bsky::richtext::facet::{ByteSlice, Link, Main, MainFeaturesItem, Mention}; -use atrium_api::types::{Union, UnknownData, EMPTY_EXTRA_DATA}; +use atrium_api::app::bsky::richtext::facet::{ + ByteSliceData, LinkData, Main, MainData, MainFeaturesItem, MentionData, +}; +use atrium_api::types::{Union, UnknownData}; use ipld_core::ipld::Ipld; pub async fn rich_text_with_detect_facets(text: &str) -> Result { @@ -21,18 +23,18 @@ pub async fn rich_text_with_detect_facets(text: &str) -> Result { } fn facet(byte_start: usize, byte_end: usize) -> Main { - Main { + MainData { features: vec![Union::Unknown(UnknownData { r#type: String::new(), data: Ipld::Null, })], - index: ByteSlice { + index: ByteSliceData { byte_end, byte_start, - extra_data: EMPTY_EXTRA_DATA, - }, - extra_data: EMPTY_EXTRA_DATA, + } + .into(), } + .into() } #[test] @@ -431,30 +433,34 @@ fn segments() { let input = RichText::new( "one two three", Some(vec![ - Main { - features: vec![Union::Refs(MainFeaturesItem::Mention(Box::new(Mention { - did: "did:plc:123".parse().expect("invalid did"), - extra_data: EMPTY_EXTRA_DATA, - })))], - index: ByteSlice { + MainData { + features: vec![Union::Refs(MainFeaturesItem::Mention(Box::new( + MentionData { + did: "did:plc:123".parse().expect("invalid did"), + } + .into(), + )))], + index: ByteSliceData { byte_end: 3, byte_start: 0, - extra_data: EMPTY_EXTRA_DATA, - }, - extra_data: EMPTY_EXTRA_DATA, - }, - Main { - features: vec![Union::Refs(MainFeaturesItem::Link(Box::new(Link { - uri: String::from("https://example.com"), - extra_data: EMPTY_EXTRA_DATA, - })))], - index: ByteSlice { + } + .into(), + } + .into(), + MainData { + features: vec![Union::Refs(MainFeaturesItem::Link(Box::new( + LinkData { + uri: String::from("https://example.com"), + } + .into(), + )))], + index: ByteSliceData { byte_end: 7, byte_start: 4, - extra_data: EMPTY_EXTRA_DATA, - }, - extra_data: EMPTY_EXTRA_DATA, - }, + } + .into(), + } + .into(), facet(8, 13), ]), ); diff --git a/lexicon/atrium-codegen/src/token_stream.rs b/lexicon/atrium-codegen/src/token_stream.rs index f4e9007c..12a1f547 100644 --- a/lexicon/atrium-codegen/src/token_stream.rs +++ b/lexicon/atrium-codegen/src/token_stream.rs @@ -263,7 +263,8 @@ fn lex_token(token: &LexToken, name: &str, schema_id: &str) -> Result Result { let description = description(&object.description); let derives = derives()?; - let struct_name = format_ident!("{}", name.to_pascal_case()); + let struct_name = format_ident!("{}Data", name.to_pascal_case()); + let object_name = format_ident!("{}", name.to_pascal_case()); let mut required = if let Some(required) = &object.required { HashSet::from_iter(required) } else { @@ -289,9 +290,9 @@ fn lex_object(object: &LexObject, name: &str) -> Result { #[serde(rename_all = "camelCase")] pub struct #struct_name { #(#fields)* - #[serde(flatten)] - pub extra_data: ipld_core::ipld::Ipld, } + + pub type #object_name = crate::types::Object<#struct_name>; }) } From e63dd1825e96a4453845fa6cfb8da4403004569b Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 16:06:03 +0900 Subject: [PATCH 4/9] Fix README --- atrium-api/README.md | 14 ++++++++------ bsky-sdk/README.md | 24 +++++++++++++----------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/atrium-api/README.md b/atrium-api/README.md index 8a079459..378c24fb 100644 --- a/atrium-api/README.md +++ b/atrium-api/README.md @@ -14,7 +14,6 @@ Any HTTP client that implements [`atrium_xrpc::HttpClient`](https://docs.rs/atri ```rust,no_run use atrium_api::client::AtpServiceClient; -use atrium_api::com::atproto::server::create_session::Input; use atrium_xrpc_client::reqwest::ReqwestClient; #[tokio::main] @@ -25,11 +24,14 @@ async fn main() -> Result<(), Box> { .com .atproto .server - .create_session(Input { - auth_factor_token: None, - identifier: "alice@mail.com".into(), - password: "hunter2".into(), - }) + .create_session( + atrium_api::com::atproto::server::create_session::InputData { + auth_factor_token: None, + identifier: "alice@mail.com".into(), + password: "hunter2".into(), + } + .into(), + ) .await; println!("{:?}", result); Ok(()) diff --git a/bsky-sdk/README.md b/bsky-sdk/README.md index b18b1f69..f8d1946b 100644 --- a/bsky-sdk/README.md +++ b/bsky-sdk/README.md @@ -80,19 +80,21 @@ async fn main() -> Result<(), Box> { let moderator = agent.moderator(&preferences).await?; // in feeds - for feed_view_post in agent + let output = agent .api .app .bsky .feed - .get_timeline(atrium_api::app::bsky::feed::get_timeline::Parameters { - algorithm: None, - cursor: None, - limit: None, - }) - .await? - .feed - { + .get_timeline( + atrium_api::app::bsky::feed::get_timeline::ParametersData { + algorithm: None, + cursor: None, + limit: None, + } + .into(), + ) + .await?; + for feed_view_post in &output.feed { // We call the appropriate moderation function for the content let post_mod = moderator.moderate_post(&feed_view_post.post); // don't include in feeds? @@ -127,7 +129,7 @@ async fn main() -> Result<(), Box> { assert!(segments[2].text == ", check out this link: "); assert!(segments[3].text == "https://example.com" && segments[3].link().is_some()); - let post_record = atrium_api::app::bsky::feed::post::Record { + let record_data = atrium_api::app::bsky::feed::post::RecordData { created_at: atrium_api::types::string::Datetime::now(), embed: None, entities: None, @@ -138,7 +140,7 @@ async fn main() -> Result<(), Box> { tags: None, text: rt.text, }; - println!("{:?}", post_record); + println!("{:?}", record_data); Ok(()) } ``` From e27c82019d7b617a3666fe731b4a55432935ad0e Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 16:23:26 +0900 Subject: [PATCH 5/9] Fix tests --- bsky-sdk/src/agent/builder.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bsky-sdk/src/agent/builder.rs b/bsky-sdk/src/agent/builder.rs index 21dd7251..77e0145c 100644 --- a/bsky-sdk/src/agent/builder.rs +++ b/bsky-sdk/src/agent/builder.rs @@ -202,7 +202,10 @@ mod tests { .await?; assert_eq!(agent.get_endpoint().await, "https://bsky.social"); assert_eq!( - agent.get_session().await.map(|session| session.handle), + agent + .get_session() + .await + .map(|session| session.handle.clone()), Some("handle.test".parse().expect("invalid handle")) ); } From b5f201092e0a548f08cfbcb84e2f3a61fbed229e Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 22:54:46 +0900 Subject: [PATCH 6/9] Remove unnecessary clone() and into() --- atrium-api/src/agent.rs | 147 +++++++++++++++------------------- atrium-api/src/agent/inner.rs | 16 ++-- atrium-cli/src/runner.rs | 8 +- bsky-sdk/src/agent.rs | 37 +++++---- bsky-sdk/src/agent/builder.rs | 10 +-- bsky-sdk/src/rich_text.rs | 2 +- 6 files changed, 101 insertions(+), 119 deletions(-) diff --git a/atrium-api/src/agent.rs b/atrium-api/src/agent.rs index 93000fb1..97de8ae3 100644 --- a/atrium-api/src/agent.rs +++ b/atrium-api/src/agent.rs @@ -91,15 +91,15 @@ where let result = self.api.com.atproto.server.get_session().await; match result { Ok(output) => { - assert_eq!(output.did, session.did); + assert_eq!(output.data.did, session.data.did); if let Some(mut session) = self.store.get_session().await { - session.did_doc = output.did_doc.clone(); - session.email = output.email.clone(); - session.email_confirmed = output.email_confirmed; - session.handle = output.handle.clone(); + session.did_doc = output.data.did_doc.clone(); + session.email = output.data.email; + session.email_confirmed = output.data.email_confirmed; + session.handle = output.data.handle; self.store.set_session(session).await; } - if let Some(did_doc) = &output.did_doc { + if let Some(did_doc) = &output.data.did_doc { self.store.update_endpoint(did_doc); } Ok(()) @@ -337,25 +337,22 @@ mod tests { let session_data = session_data(); let client = MockClient { responses: MockResponses { - get_session: Some( - crate::com::atproto::server::get_session::OutputData { - active: session_data.active.clone(), - did: session_data.did.clone(), - did_doc: session_data.did_doc.clone(), - email: session_data.email.clone(), - email_auth_factor: session_data.email_auth_factor, - email_confirmed: session_data.email_confirmed, - handle: session_data.handle.clone(), - status: session_data.status.clone(), - } - .into(), - ), + get_session: Some(crate::com::atproto::server::get_session::OutputData { + active: session_data.active, + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + }), ..Default::default() }, ..Default::default() }; let agent = AtpAgent::new(client, MemorySessionStore::default()); - agent.store.set_session(session_data.into()).await; + agent.store.set_session(session_data.clone().into()).await; let output = agent .api .com @@ -370,29 +367,26 @@ mod tests { #[tokio::test] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] async fn test_xrpc_get_session_with_refresh() { - let mut session = session_data(); - session.access_jwt = String::from("expired"); + let mut session_data = session_data(); + session_data.access_jwt = String::from("expired"); let client = MockClient { responses: MockResponses { - get_session: Some( - crate::com::atproto::server::get_session::OutputData { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - } - .into(), - ), + get_session: Some(crate::com::atproto::server::get_session::OutputData { + active: session_data.active, + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + }), ..Default::default() }, ..Default::default() }; let agent = AtpAgent::new(client, MemorySessionStore::default()); - agent.store.set_session(session.into()).await; + agent.store.set_session(session_data.clone().into()).await; let output = agent .api .com @@ -407,7 +401,7 @@ mod tests { .store .get_session() .await - .map(|session| session.access_jwt.clone()), + .map(|session| session.data.access_jwt), Some("access".into()) ); } @@ -415,30 +409,27 @@ mod tests { #[cfg(not(target_arch = "wasm32"))] #[tokio::test] async fn test_xrpc_get_session_with_duplicated_refresh() { - let mut session = session_data(); - session.access_jwt = String::from("expired"); + let mut session_data = session_data(); + session_data.access_jwt = String::from("expired"); let client = MockClient { responses: MockResponses { - get_session: Some( - crate::com::atproto::server::get_session::OutputData { - active: session.active.clone(), - did: session.did.clone(), - did_doc: session.did_doc.clone(), - email: session.email.clone(), - email_auth_factor: session.email_auth_factor, - email_confirmed: session.email_confirmed, - handle: session.handle.clone(), - status: session.status.clone(), - } - .into(), - ), + get_session: Some(crate::com::atproto::server::get_session::OutputData { + active: session_data.active, + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + }), ..Default::default() }, ..Default::default() }; let counts = Arc::clone(&client.counts); let agent = Arc::new(AtpAgent::new(client, MemorySessionStore::default())); - agent.store.set_session(session.into()).await; + agent.store.set_session(session_data.clone().into()).await; let handles = (0..3).map(|_| { let agent = Arc::clone(&agent); tokio::spawn(async move { agent.api.com.atproto.server.get_session().await }) @@ -457,7 +448,7 @@ mod tests { .store .get_session() .await - .map(|session| session.access_jwt.clone()), + .map(|session| session.data.access_jwt), Some("access".into()) ); assert_eq!( @@ -477,19 +468,16 @@ mod tests { { let client = MockClient { responses: MockResponses { - get_session: Some( - crate::com::atproto::server::get_session::OutputData { - active: session_data.active.clone(), - did: session_data.did.clone(), - did_doc: session_data.did_doc.clone(), - email: session_data.email.clone(), - email_auth_factor: session_data.email_auth_factor, - email_confirmed: session_data.email_confirmed, - handle: session_data.handle.clone(), - status: session_data.status.clone(), - } - .into(), - ), + get_session: Some(crate::com::atproto::server::get_session::OutputData { + active: session_data.active, + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + }), ..Default::default() }, ..Default::default() @@ -532,19 +520,16 @@ mod tests { let session_data = session_data(); let client = MockClient { responses: MockResponses { - get_session: Some( - crate::com::atproto::server::get_session::OutputData { - active: session_data.active.clone(), - did: session_data.did.clone(), - did_doc: session_data.did_doc.clone(), - email: session_data.email.clone(), - email_auth_factor: session_data.email_auth_factor, - email_confirmed: session_data.email_confirmed, - handle: session_data.handle.clone(), - status: session_data.status.clone(), - } - .into(), - ), + get_session: Some(crate::com::atproto::server::get_session::OutputData { + active: session_data.active, + did: session_data.did.clone(), + did_doc: session_data.did_doc.clone(), + email: session_data.email.clone(), + email_auth_factor: session_data.email_auth_factor, + email_confirmed: session_data.email_confirmed, + handle: session_data.handle.clone(), + status: session_data.status.clone(), + }), ..Default::default() }, ..Default::default() @@ -560,7 +545,7 @@ mod tests { ) .await .expect("resume_session should be succeeded"); - assert_eq!(agent.get_session().await, Some(session_data.into())); + assert_eq!(agent.get_session().await, Some(session_data.clone().into())); } #[tokio::test] diff --git a/atrium-api/src/agent/inner.rs b/atrium-api/src/agent/inner.rs index cd6c81ce..e7257f34 100644 --- a/atrium-api/src/agent/inner.rs +++ b/atrium-api/src/agent/inner.rs @@ -86,9 +86,9 @@ where async fn authentication_token(&self, is_refresh: bool) -> Option { self.store.get_session().await.map(|session| { if is_refresh { - session.refresh_jwt.clone() + session.data.refresh_jwt } else { - session.access_jwt.clone() + session.data.access_jwt } }) } @@ -178,14 +178,14 @@ where async fn refresh_session_inner(&self) { if let Ok(output) = self.call_refresh_session().await { if let Some(mut session) = self.store.get_session().await { - session.access_jwt = output.access_jwt.clone(); - session.did = output.did.clone(); - session.did_doc = output.did_doc.clone(); - session.handle = output.handle.clone(); - session.refresh_jwt = output.refresh_jwt.clone(); + session.access_jwt = output.data.access_jwt; + session.did = output.data.did; + session.did_doc = output.data.did_doc.clone(); + session.handle = output.data.handle; + session.refresh_jwt = output.data.refresh_jwt; self.store.set_session(session).await; } - if let Some(did_doc) = &output.did_doc { + if let Some(did_doc) = &output.data.did_doc { self.store.update_endpoint(did_doc); } } else { diff --git a/atrium-cli/src/runner.rs b/atrium-cli/src/runner.rs index 36686b1b..4213dbe3 100644 --- a/atrium-cli/src/runner.rs +++ b/atrium-cli/src/runner.rs @@ -337,8 +337,8 @@ impl Runner { .into(), ) .await? - .did - .clone(), + .data + .did, AtIdentifier::Did(did) => did, }; let chat = &self @@ -364,7 +364,7 @@ impl Runner { .convo .send_message( atrium_api::chat::bsky::convo::send_message::InputData { - convo_id: convo.convo.id.clone(), + convo_id: convo.data.convo.data.id, message: atrium_api::chat::bsky::convo::defs::MessageInputData { embed: None, facets: None, @@ -400,7 +400,7 @@ impl Runner { .unwrap_or_default() .into(), aspect_ratio: None, - image: output.blob.clone(), + image: output.data.blob, } .into(), ) diff --git a/bsky-sdk/src/agent.rs b/bsky-sdk/src/agent.rs index bc289ec7..9601b716 100644 --- a/bsky-sdk/src/agent.rs +++ b/bsky-sdk/src/agent.rs @@ -92,7 +92,7 @@ where .push(ModerationPrefsLabeler::default()); } let mut label_prefs = Vec::new(); - let output = self + for pref in self .api .app .bsky @@ -100,8 +100,10 @@ where .get_preferences( atrium_api::app::bsky::actor::get_preferences::ParametersData {}.into(), ) - .await?; - for pref in &output.preferences { + .await? + .data + .preferences + { match pref { Union::Refs(PreferencesItem::AdultContentPref(p)) => { prefs.moderation_prefs.adult_content_enabled = p.enabled; @@ -110,7 +112,7 @@ where label_prefs.push(p); } Union::Refs(PreferencesItem::SavedFeedsPrefV2(p)) => { - prefs.saved_feeds = p.items.clone(); + prefs.saved_feeds = p.data.items; } Union::Refs(PreferencesItem::FeedViewPref(p)) => { let mut pref = FeedViewPreference::default(); @@ -129,22 +131,23 @@ where if let Some(v) = p.hide_quote_posts { pref.hide_quote_posts = v; } - prefs.feed_view_prefs.insert(p.feed.clone(), pref); + prefs.feed_view_prefs.insert(p.data.feed, pref); } Union::Refs(PreferencesItem::MutedWordsPref(p)) => { - prefs.moderation_prefs.muted_words = p.items.clone(); + prefs.moderation_prefs.muted_words = p.data.items; } Union::Refs(PreferencesItem::HiddenPostsPref(p)) => { - prefs.moderation_prefs.hidden_posts = p.items.clone(); + prefs.moderation_prefs.hidden_posts = p.data.items; } Union::Unknown(u) => { if u.r#type == "app.bsky.actor.defs#labelersPref" { prefs.moderation_prefs.labelers.extend( - from_ipld::(u.data.clone())? + from_ipld::(u.data)? + .data .labelers - .iter() + .into_iter() .map(|item| ModerationPrefsLabeler { - did: item.did.clone(), + did: item.data.did, labels: HashMap::default(), is_default_labeler: false, }), @@ -157,22 +160,22 @@ where } } for pref in label_prefs { - if let Some(did) = &pref.labeler_did { + if let Some(did) = pref.data.labeler_did { if let Some(l) = prefs .moderation_prefs .labelers .iter_mut() - .find(|l| &l.did == did) + .find(|l| l.did == did) { l.labels.insert( - pref.label.clone(), - pref.visibility.parse().expect("invalid visibility"), + pref.data.label, + pref.data.visibility.parse().expect("invalid visibility"), ); } } else { prefs.moderation_prefs.labels.insert( - pref.label.clone(), - pref.visibility.parse().expect("invalid visibility"), + pref.data.label, + pref.data.visibility.parse().expect("invalid visibility"), ); } } @@ -225,7 +228,7 @@ where ); } Ok(Moderator::new( - self.get_session().await.map(|s| s.did.clone()), + self.get_session().await.map(|s| s.data.did), preferences.moderation_prefs.clone(), label_defs, )) diff --git a/bsky-sdk/src/agent/builder.rs b/bsky-sdk/src/agent/builder.rs index 77e0145c..06f312d6 100644 --- a/bsky-sdk/src/agent/builder.rs +++ b/bsky-sdk/src/agent/builder.rs @@ -162,10 +162,7 @@ mod tests { .await?; assert_eq!(agent.get_endpoint().await, "https://bsky.social"); assert_eq!( - agent - .get_session() - .await - .map(|session| session.handle.clone()), + agent.get_session().await.map(|session| session.data.handle), Some("handle.test".parse().expect("invalid handle")) ); } @@ -202,10 +199,7 @@ mod tests { .await?; assert_eq!(agent.get_endpoint().await, "https://bsky.social"); assert_eq!( - agent - .get_session() - .await - .map(|session| session.handle.clone()), + agent.get_session().await.map(|session| session.data.handle), Some("handle.test".parse().expect("invalid handle")) ); } diff --git a/bsky-sdk/src/rich_text.rs b/bsky-sdk/src/rich_text.rs index 2019b711..e3a98548 100644 --- a/bsky-sdk/src/rich_text.rs +++ b/bsky-sdk/src/rich_text.rs @@ -240,7 +240,7 @@ impl RichText { atrium_api::com::atproto::identity::resolve_handle::ParametersData { handle: mention.handle.parse().expect("invalid handle"), }.into() - ).await?.did.clone(); + ).await?.data.did; features.push(Union::Refs(MainFeaturesItem::Mention(Box::new( MentionData { did }.into(), )))); From d0ba9dde570335b9b2373f4ea606038782106140 Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 22:55:46 +0900 Subject: [PATCH 7/9] Fix ModerationPrefs deserializer --- bsky-sdk/src/moderation/types.rs | 22 +++++++++++++--- bsky-sdk/src/preference.rs | 45 +++++++++++++++++++++++++++----- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/bsky-sdk/src/moderation/types.rs b/bsky-sdk/src/moderation/types.rs index 3d1e20ff..8d7d1b6a 100644 --- a/bsky-sdk/src/moderation/types.rs +++ b/bsky-sdk/src/moderation/types.rs @@ -7,7 +7,7 @@ use atrium_api::app::bsky::actor::defs::{ use atrium_api::app::bsky::graph::defs::{ListView, ListViewBasic}; use atrium_api::com::atproto::label::defs::{Label, LabelValueDefinitionStrings}; use atrium_api::types::string::Did; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize}; use std::{collections::HashMap, str::FromStr}; // behaviors @@ -628,11 +628,11 @@ pub struct ModerationCauseOther { // moderation preferences /// The labeler preferences for moderation. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct ModerationPrefsLabeler { pub did: Did, pub labels: HashMap, - #[serde(skip_serializing)] + #[serde(skip_serializing, skip_deserializing)] pub is_default_labeler: bool, } @@ -647,16 +647,30 @@ impl Default for ModerationPrefsLabeler { } /// The moderation preferences. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct ModerationPrefs { pub adult_content_enabled: bool, pub labels: HashMap, + #[serde(deserialize_with = "deserialize_labelers")] pub labelers: Vec, pub muted_words: Vec, pub hidden_posts: Vec, } +fn deserialize_labelers<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let mut labelers: Vec = Deserialize::deserialize(deserializer)?; + for labeler in labelers.iter_mut() { + if labeler.did.as_str() == BSKY_LABELER_DID { + labeler.is_default_labeler = true; + } + } + Ok(labelers) +} + impl Default for ModerationPrefs { fn default() -> Self { Self { diff --git a/bsky-sdk/src/preference.rs b/bsky-sdk/src/preference.rs index 38daa4a6..2f1bdd86 100644 --- a/bsky-sdk/src/preference.rs +++ b/bsky-sdk/src/preference.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; /// A preference for a feed view. -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct FeedViewPreference { pub hide_replies: bool, @@ -28,7 +28,7 @@ impl Default for FeedViewPreference { } /// Preferences for Bluesky application. -#[derive(Debug, Default, Serialize, Deserialize)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Preferences { pub saved_feeds: Vec, @@ -38,8 +38,10 @@ pub struct Preferences { #[cfg(test)] mod tests { + use super::*; + use crate::moderation::ModerationPrefsLabeler; use atrium_api::app::bsky::actor::get_preferences::Output; - use serde_json::{from_str, to_string}; + use serde_json::{from_str, to_string, Value}; const XRPC_PREFERENCES_JSON: &str = r#"{ "preferences": [ @@ -65,13 +67,44 @@ mod tests { #[test] fn xrpc_preferences_json() { - let deserialized = from_str::(XRPC_PREFERENCES_JSON) + let deserialized1 = from_str::(XRPC_PREFERENCES_JSON) .expect("deserializing preferences should succeed"); - assert_eq!(deserialized.preferences.len(), 2); - let serialized = to_string(&deserialized).expect("serializing preferences should succeed"); + assert_eq!(deserialized1.preferences.len(), 2); + let serialized = to_string(&deserialized1).expect("serializing preferences should succeed"); assert_eq!( serialized.replace(char::is_whitespace, ""), XRPC_PREFERENCES_JSON.replace(char::is_whitespace, "") ); + let deserialized2 = + from_str::(&serialized).expect("deserializing preferences should succeed"); + assert_eq!(deserialized1, deserialized2); + } + + #[test] + fn sdk_preferences_json() { + let preferences = Preferences { + saved_feeds: Vec::new(), + feed_view_prefs: HashMap::new(), + moderation_prefs: ModerationPrefs { + labelers: vec![ + ModerationPrefsLabeler::default(), + ModerationPrefsLabeler { + did: "did:fake:labeler.test".parse().expect("invalid did"), + labels: HashMap::new(), + is_default_labeler: false, + }, + ], + ..Default::default() + }, + }; + let serialized1 = to_string(&preferences).expect("serializing preferences should succeed"); + let deserialized = from_str::(&serialized1) + .expect("deserializing preferences should succeed"); + assert_eq!(preferences, deserialized); + let serialized2 = to_string(&deserialized).expect("serializing preferences should succeed"); + assert_eq!( + from_str::(&serialized1).expect("deserializing to value should succeed"), + from_str::(&serialized2).expect("deserializing to value should succeed"), + ); } } From 87ca14a41fe8d6fa090713f14d6e9ab69dc2cf0f Mon Sep 17 00:00:00 2001 From: sugyan Date: Wed, 19 Jun 2024 23:16:44 +0900 Subject: [PATCH 8/9] Fix has_muted_word https://github.com/bluesky-social/atproto/pull/2570 --- bsky-sdk/src/moderation/mutewords.rs | 4 +- bsky-sdk/src/moderation/tests/mutewords.rs | 73 +++++++++++++++++++++- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/bsky-sdk/src/moderation/mutewords.rs b/bsky-sdk/src/moderation/mutewords.rs index 6ae63c2a..22879759 100644 --- a/bsky-sdk/src/moderation/mutewords.rs +++ b/bsky-sdk/src/moderation/mutewords.rs @@ -45,8 +45,8 @@ pub fn has_muted_word( tags.extend( facets .iter() - .filter_map(|facet| { - facet.features.iter().find_map(|feature| { + .flat_map(|facet| { + facet.features.iter().filter_map(|feature| { if let Union::Refs(MainFeaturesItem::Tag(tag)) = feature { Some(&tag.tag) } else { diff --git a/bsky-sdk/src/moderation/tests/mutewords.rs b/bsky-sdk/src/moderation/tests/mutewords.rs index 02ee1bfa..6121d02c 100644 --- a/bsky-sdk/src/moderation/tests/mutewords.rs +++ b/bsky-sdk/src/moderation/tests/mutewords.rs @@ -1,8 +1,12 @@ use super::{post_view, profile_view_basic}; use crate::moderation::decision::DecisionContext; +use crate::moderation::mutewords::has_muted_word; use crate::moderation::{ModerationPrefs, Moderator}; use atrium_api::app::bsky::actor::defs::{MutedWord, MutedWordData}; -use std::collections::HashMap; +use atrium_api::app::bsky::richtext::facet::{ByteSliceData, MainData, MainFeaturesItem, TagData}; +use atrium_api::types::{Union, UnknownData}; +use ipld_core::ipld::Ipld; +use std::collections::{BTreeMap, HashMap}; fn muted_word(target: &str, value: &str) -> MutedWord { MutedWordData { @@ -473,6 +477,73 @@ async fn has_muted_word_from_rich_text() -> crate::error::Result<()> { Ok(()) } +#[test] +fn facet_with_multiple_features() { + // multiple tags + { + assert!(has_muted_word( + &[muted_word("content", "bad")], + "tags", + &Some(vec![MainData { + features: vec![ + Union::Refs(MainFeaturesItem::Tag(Box::new( + TagData { + tag: String::from("good") + } + .into() + ))), + Union::Refs(MainFeaturesItem::Tag(Box::new( + TagData { + tag: String::from("bad") + } + .into() + ))) + ], + index: ByteSliceData { + byte_end: 4, + byte_start: 0, + } + .into() + } + .into()]), + &Some(vec![]), + &None, + )) + } + // other features + { + assert!(has_muted_word( + &[muted_word("content", "bad")], + "test", + &Some(vec![MainData { + features: vec![ + Union::Unknown(UnknownData { + r#type: String::from("com.example.richtext.facet#other"), + data: Ipld::Map(BTreeMap::from_iter([( + String::from("foo"), + Ipld::String(String::from("bar")) + ),])) + }), + Union::Refs(MainFeaturesItem::Tag(Box::new( + TagData { + tag: String::from("bad") + } + .into() + ))) + ], + index: ByteSliceData { + byte_end: 4, + byte_start: 0, + } + .into() + } + .into()]), + &Some(vec![]), + &None, + )) + } +} + #[test] fn does_not_mute_own_post() { let prefs = &ModerationPrefs { From a8d19cd81ca698bf0d70827bacc31fa77ba458b8 Mon Sep 17 00:00:00 2001 From: sugyan Date: Thu, 20 Jun 2024 00:09:32 +0900 Subject: [PATCH 9/9] Add ThreadViewPreference --- bsky-sdk/src/agent.rs | 27 ++++++++++++++++--- bsky-sdk/src/preference.rs | 55 +++++++++++++++++++++++++++++++++++--- 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/bsky-sdk/src/agent.rs b/bsky-sdk/src/agent.rs index 9601b716..455e4a94 100644 --- a/bsky-sdk/src/agent.rs +++ b/bsky-sdk/src/agent.rs @@ -7,11 +7,11 @@ use self::config::Config; use crate::error::Result; use crate::moderation::util::interpret_label_value_definitions; use crate::moderation::{ModerationPrefsLabeler, Moderator}; -use crate::preference::{FeedViewPreference, Preferences}; +use crate::preference::{FeedViewPreferenceData, Preferences, ThreadViewPreferenceData}; use atrium_api::agent::store::MemorySessionStore; use atrium_api::agent::{store::SessionStore, AtpAgent}; use atrium_api::app::bsky::actor::defs::{LabelersPref, PreferencesItem}; -use atrium_api::types::Union; +use atrium_api::types::{Object, Union}; use atrium_api::xrpc::XrpcClient; #[cfg(feature = "default-client")] use atrium_xrpc_client::reqwest::ReqwestClient; @@ -115,7 +115,7 @@ where prefs.saved_feeds = p.data.items; } Union::Refs(PreferencesItem::FeedViewPref(p)) => { - let mut pref = FeedViewPreference::default(); + let mut pref = FeedViewPreferenceData::default(); if let Some(v) = p.hide_replies { pref.hide_replies = v; } @@ -131,7 +131,26 @@ where if let Some(v) = p.hide_quote_posts { pref.hide_quote_posts = v; } - prefs.feed_view_prefs.insert(p.data.feed, pref); + prefs.feed_view_prefs.insert( + p.data.feed, + Object { + data: pref, + extra_data: p.extra_data, // pass through extra data + }, + ); + } + Union::Refs(PreferencesItem::ThreadViewPref(p)) => { + let mut pref = ThreadViewPreferenceData::default(); + if let Some(v) = &p.sort { + pref.sort = v.clone(); + } + if let Some(v) = p.prioritize_followed_users { + pref.prioritize_followed_users = v; + } + prefs.thread_view_prefs = Object { + data: pref, + extra_data: p.extra_data, // pass through extra data + }; } Union::Refs(PreferencesItem::MutedWordsPref(p)) => { prefs.moderation_prefs.muted_words = p.data.items; diff --git a/bsky-sdk/src/preference.rs b/bsky-sdk/src/preference.rs index 2f1bdd86..3d11e9d0 100644 --- a/bsky-sdk/src/preference.rs +++ b/bsky-sdk/src/preference.rs @@ -1,13 +1,14 @@ //! Preferences for Bluesky application. use crate::moderation::ModerationPrefs; use atrium_api::app::bsky::actor::defs::SavedFeed; +use atrium_api::types::Object; use serde::{Deserialize, Serialize}; use std::collections::HashMap; /// A preference for a feed view. #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] -pub struct FeedViewPreference { +pub struct FeedViewPreferenceData { pub hide_replies: bool, pub hide_replies_by_unfollowed: bool, pub hide_replies_by_like_count: i64, @@ -15,7 +16,7 @@ pub struct FeedViewPreference { pub hide_quote_posts: bool, } -impl Default for FeedViewPreference { +impl Default for FeedViewPreferenceData { fn default() -> Self { Self { hide_replies: false, @@ -27,15 +28,55 @@ impl Default for FeedViewPreference { } } +pub type FeedViewPreference = Object; + +/// A preference for a thread view. +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct ThreadViewPreferenceData { + pub sort: String, + pub prioritize_followed_users: bool, +} + +impl ThreadViewPreferenceData { + pub const SORT_OLDEST: &str = "oldest"; + pub const SORT_NEWEST: &str = "newest"; + pub const SORT_MOST_LIKES: &str = "most-likes"; + pub const SORT_RANDOM: &str = "random"; +} + +impl Default for ThreadViewPreferenceData { + fn default() -> Self { + Self { + sort: Self::SORT_OLDEST.to_string(), + prioritize_followed_users: true, + } + } +} + +pub type ThreadViewPreference = Object; + /// Preferences for Bluesky application. -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Preferences { pub saved_feeds: Vec, pub feed_view_prefs: HashMap, + pub thread_view_prefs: ThreadViewPreference, pub moderation_prefs: ModerationPrefs, } +impl Default for Preferences { + fn default() -> Self { + Self { + saved_feeds: Default::default(), + feed_view_prefs: Default::default(), + thread_view_prefs: ThreadViewPreferenceData::default().into(), + moderation_prefs: Default::default(), + } + } +} + #[cfg(test)] mod tests { use super::*; @@ -56,6 +97,11 @@ mod tests { } ] }, + { + "$type": "app.bsky.actor.defs#threadViewPref", + "sort": "oldest", + "lab_treeViewEnabled": false + }, { "$type": "app.bsky.actor.defs#feedViewPref", "feed": "home", @@ -69,7 +115,7 @@ mod tests { fn xrpc_preferences_json() { let deserialized1 = from_str::(XRPC_PREFERENCES_JSON) .expect("deserializing preferences should succeed"); - assert_eq!(deserialized1.preferences.len(), 2); + assert_eq!(deserialized1.preferences.len(), 3); let serialized = to_string(&deserialized1).expect("serializing preferences should succeed"); assert_eq!( serialized.replace(char::is_whitespace, ""), @@ -85,6 +131,7 @@ mod tests { let preferences = Preferences { saved_feeds: Vec::new(), feed_view_prefs: HashMap::new(), + thread_view_prefs: ThreadViewPreferenceData::default().into(), moderation_prefs: ModerationPrefs { labelers: vec![ ModerationPrefsLabeler::default(),