···127127 let (line, col) = offset_to_line_col(self.err_location.offset(), &self.src);
128128 let len = self.err_location.len();
129129 let location =
130130- SourceSpan::new(SourceOffset::from_location(&src.inner(), line, col), len);
130130+ SourceSpan::new(SourceOffset::from_location(src.inner(), line, col), len);
131131 Self {
132132 kind: self.kind,
133133 src,
···173173 fn from(err: serde_json::Error) -> Self {
174174 let line = err.line();
175175 let column = err.column();
176176- let location = SourceSpan::new(SourceOffset::from_location(&"", line, column), 0);
176176+ let location = SourceSpan::new(SourceOffset::from_location("", line, column), 0);
177177 Self {
178178 kind: ParseErrorKind::SerdeError(SerDeError::SDJson(err)),
179179 src: NamedSource::new(Cow::Borrowed("json"), Cow::Borrowed("")),
+3
crates/weaver-common/src/lexicons/app.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app` namespace.
33+pub mod bsky;
+11
crates/weaver-common/src/lexicons/app/bsky.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky` namespace.
33+pub mod actor;
44+pub mod embed;
55+pub mod feed;
66+pub mod graph;
77+pub mod labeler;
88+pub mod notification;
99+pub mod richtext;
1010+pub mod unspecced;
1111+pub mod video;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.actor` namespace.
33+pub mod defs;
44+pub mod get_preferences;
55+pub mod get_profile;
66+pub mod get_profiles;
77+pub mod get_suggestions;
88+pub mod profile;
99+pub mod put_preferences;
1010+pub mod search_actors;
1111+pub mod search_actors_typeahead;
1212+pub mod status;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.embed` namespace.
33+pub mod defs;
44+pub mod external;
55+pub mod images;
66+pub mod record;
77+pub mod record_with_media;
88+pub mod video;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.embed.defs` namespace.
33+///width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct AspectRatioData {
77+ pub height: core::num::NonZeroU64,
88+ pub width: core::num::NonZeroU64,
99+}
1010+pub type AspectRatio = atrium_api::types::Object<AspectRatioData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.embed.images` namespace.
33+//!A set of images embedded in a Bluesky record (eg, a post).
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct MainData {
77+ pub images: Vec<Image>,
88+}
99+pub type Main = atrium_api::types::Object<MainData>;
1010+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1111+#[serde(rename_all = "camelCase")]
1212+pub struct ImageData {
1313+ ///Alt text description of the image, for accessibility.
1414+ pub alt: String,
1515+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1616+ pub aspect_ratio: core::option::Option<crate::app::bsky::embed::defs::AspectRatio>,
1717+ pub image: atrium_api::types::BlobRef,
1818+}
1919+pub type Image = atrium_api::types::Object<ImageData>;
2020+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2121+#[serde(rename_all = "camelCase")]
2222+pub struct ViewData {
2323+ pub images: Vec<ViewImage>,
2424+}
2525+pub type View = atrium_api::types::Object<ViewData>;
2626+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2727+#[serde(rename_all = "camelCase")]
2828+pub struct ViewImageData {
2929+ ///Alt text description of the image, for accessibility.
3030+ pub alt: String,
3131+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3232+ pub aspect_ratio: core::option::Option<crate::app::bsky::embed::defs::AspectRatio>,
3333+ ///Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.
3434+ pub fullsize: String,
3535+ ///Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.
3636+ pub thumb: String,
3737+}
3838+pub type ViewImage = atrium_api::types::Object<ViewImageData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.feed` namespace.
33+pub mod defs;
44+pub mod describe_feed_generator;
55+pub mod generator;
66+pub mod get_actor_feeds;
77+pub mod get_actor_likes;
88+pub mod get_author_feed;
99+pub mod get_feed;
1010+pub mod get_feed_generator;
1111+pub mod get_feed_generators;
1212+pub mod get_feed_skeleton;
1313+pub mod get_likes;
1414+pub mod get_list_feed;
1515+pub mod get_post_thread;
1616+pub mod get_posts;
1717+pub mod get_quotes;
1818+pub mod get_reposted_by;
1919+pub mod get_suggested_feeds;
2020+pub mod get_timeline;
2121+pub mod like;
2222+pub mod post;
2323+pub mod postgate;
2424+pub mod repost;
2525+pub mod search_posts;
2626+pub mod send_interactions;
2727+pub mod threadgate;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.feed.postgate` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ pub created_at: atrium_api::types::string::Datetime,
88+ ///List of AT-URIs embedding this post that the author has detached from.
99+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1010+ pub detached_embedding_uris: core::option::Option<Vec<String>>,
1111+ ///List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed.
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub embedding_rules: core::option::Option<
1414+ Vec<atrium_api::types::Union<RecordEmbeddingRulesItem>>,
1515+ >,
1616+ ///Reference (AT-URI) to the post record.
1717+ pub post: String,
1818+}
1919+pub type Record = atrium_api::types::Object<RecordData>;
2020+impl From<atrium_api::types::Unknown> for RecordData {
2121+ fn from(value: atrium_api::types::Unknown) -> Self {
2222+ Self::try_from_unknown(value).unwrap()
2323+ }
2424+}
2525+///Disables embedding of this post.
2626+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2727+#[serde(rename_all = "camelCase")]
2828+pub struct DisableRuleData {}
2929+pub type DisableRule = atrium_api::types::Object<DisableRuleData>;
3030+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
3131+#[serde(tag = "$type")]
3232+pub enum RecordEmbeddingRulesItem {
3333+ #[serde(rename = "app.bsky.feed.postgate#disableRule")]
3434+ DisableRule(Box<DisableRule>),
3535+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.feed.searchPosts` namespace.
33+pub const NSID: &str = "app.bsky.feed.searchPosts";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///Filter to posts by the given account. Handles are resolved to DID before query-time.
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub author: core::option::Option<atrium_api::types::string::AtIdentifier>,
1010+ ///Optional pagination mechanism; may not necessarily allow scrolling through entire result set.
1111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1212+ pub cursor: core::option::Option<String>,
1313+ ///Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.
1414+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1515+ pub domain: core::option::Option<String>,
1616+ ///Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.
1717+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1818+ pub lang: core::option::Option<atrium_api::types::string::Language>,
1919+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2020+ pub limit: core::option::Option<atrium_api::types::LimitedNonZeroU8<100u8>>,
2121+ ///Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.
2222+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2323+ pub mentions: core::option::Option<atrium_api::types::string::AtIdentifier>,
2424+ ///Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.
2525+ pub q: String,
2626+ ///Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).
2727+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2828+ pub since: core::option::Option<String>,
2929+ ///Specifies the ranking order of results.
3030+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3131+ pub sort: core::option::Option<String>,
3232+ ///Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.
3333+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3434+ pub tag: core::option::Option<Vec<String>>,
3535+ ///Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).
3636+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3737+ pub until: core::option::Option<String>,
3838+ ///Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.
3939+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4040+ pub url: core::option::Option<String>,
4141+}
4242+pub type Parameters = atrium_api::types::Object<ParametersData>;
4343+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4444+#[serde(rename_all = "camelCase")]
4545+pub struct OutputData {
4646+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4747+ pub cursor: core::option::Option<String>,
4848+ ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.
4949+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5050+ pub hits_total: core::option::Option<i64>,
5151+ pub posts: Vec<crate::app::bsky::feed::defs::PostView>,
5252+}
5353+pub type Output = atrium_api::types::Object<OutputData>;
5454+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5555+#[serde(tag = "error", content = "message")]
5656+pub enum Error {
5757+ BadQueryString(Option<String>),
5858+}
5959+impl std::fmt::Display for Error {
6060+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
6161+ match self {
6262+ Error::BadQueryString(msg) => {
6363+ write!(_f, "BadQueryString")?;
6464+ if let Some(msg) = msg {
6565+ write!(_f, ": {msg}")?;
6666+ }
6767+ }
6868+ }
6969+ Ok(())
7070+ }
7171+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.graph` namespace.
33+pub mod block;
44+pub mod defs;
55+pub mod follow;
66+pub mod get_actor_starter_packs;
77+pub mod get_blocks;
88+pub mod get_followers;
99+pub mod get_follows;
1010+pub mod get_known_followers;
1111+pub mod get_list;
1212+pub mod get_list_blocks;
1313+pub mod get_list_mutes;
1414+pub mod get_lists;
1515+pub mod get_mutes;
1616+pub mod get_relationships;
1717+pub mod get_starter_pack;
1818+pub mod get_starter_packs;
1919+pub mod get_suggested_follows_by_actor;
2020+pub mod list;
2121+pub mod listblock;
2222+pub mod listitem;
2323+pub mod mute_actor;
2424+pub mod mute_actor_list;
2525+pub mod mute_thread;
2626+pub mod search_starter_packs;
2727+pub mod starterpack;
2828+pub mod unmute_actor;
2929+pub mod unmute_actor_list;
3030+pub mod unmute_thread;
3131+pub mod verification;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.graph.block` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ pub created_at: atrium_api::types::string::Datetime,
88+ ///DID of the account to be blocked.
99+ pub subject: atrium_api::types::string::Did,
1010+}
1111+pub type Record = atrium_api::types::Object<RecordData>;
1212+impl From<atrium_api::types::Unknown> for RecordData {
1313+ fn from(value: atrium_api::types::Unknown) -> Self {
1414+ Self::try_from_unknown(value).unwrap()
1515+ }
1616+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.graph.listblock` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ pub created_at: atrium_api::types::string::Datetime,
88+ ///Reference (AT-URI) to the mod list record.
99+ pub subject: String,
1010+}
1111+pub type Record = atrium_api::types::Object<RecordData>;
1212+impl From<atrium_api::types::Unknown> for RecordData {
1313+ fn from(value: atrium_api::types::Unknown) -> Self {
1414+ Self::try_from_unknown(value).unwrap()
1515+ }
1616+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.graph.listitem` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ pub created_at: atrium_api::types::string::Datetime,
88+ ///Reference (AT-URI) to the list record (app.bsky.graph.list).
99+ pub list: String,
1010+ ///The account which is included on the list.
1111+ pub subject: atrium_api::types::string::Did,
1212+}
1313+pub type Record = atrium_api::types::Object<RecordData>;
1414+impl From<atrium_api::types::Unknown> for RecordData {
1515+ fn from(value: atrium_api::types::Unknown) -> Self {
1616+ Self::try_from_unknown(value).unwrap()
1717+ }
1818+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.graph.verification` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ ///Date of when the verification was created.
88+ pub created_at: atrium_api::types::string::Datetime,
99+ ///Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying.
1010+ pub display_name: String,
1111+ ///Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying.
1212+ pub handle: atrium_api::types::string::Handle,
1313+ ///DID of the subject the verification applies to.
1414+ pub subject: atrium_api::types::string::Did,
1515+}
1616+pub type Record = atrium_api::types::Object<RecordData>;
1717+impl From<atrium_api::types::Unknown> for RecordData {
1818+ fn from(value: atrium_api::types::Unknown) -> Self {
1919+ Self::try_from_unknown(value).unwrap()
2020+ }
2121+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.labeler` namespace.
33+pub mod defs;
44+pub mod get_services;
55+pub mod service;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.labeler.service` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ pub created_at: atrium_api::types::string::Datetime,
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub labels: core::option::Option<atrium_api::types::Union<RecordLabelsRefs>>,
1010+ pub policies: crate::app::bsky::labeler::defs::LabelerPolicies,
1111+ ///The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub reason_types: core::option::Option<
1414+ Vec<crate::com::atproto::moderation::defs::ReasonType>,
1515+ >,
1616+ ///Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.
1717+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1818+ pub subject_collections: core::option::Option<Vec<atrium_api::types::string::Nsid>>,
1919+ ///The set of subject types (account, record, etc) this service accepts reports on.
2020+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2121+ pub subject_types: core::option::Option<
2222+ Vec<crate::com::atproto::moderation::defs::SubjectType>,
2323+ >,
2424+}
2525+pub type Record = atrium_api::types::Object<RecordData>;
2626+impl From<atrium_api::types::Unknown> for RecordData {
2727+ fn from(value: atrium_api::types::Unknown) -> Self {
2828+ Self::try_from_unknown(value).unwrap()
2929+ }
3030+}
3131+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
3232+#[serde(tag = "$type")]
3333+pub enum RecordLabelsRefs {
3434+ #[serde(rename = "com.atproto.label.defs#selfLabels")]
3535+ ComAtprotoLabelDefsSelfLabels(Box<crate::com::atproto::label::defs::SelfLabels>),
3636+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.notification` namespace.
33+pub mod defs;
44+pub mod get_unread_count;
55+pub mod list_notifications;
66+pub mod put_preferences;
77+pub mod register_push;
88+pub mod update_seen;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.notification.defs` namespace.
33+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
44+#[serde(rename_all = "camelCase")]
55+pub struct RecordDeletedData {}
66+pub type RecordDeleted = atrium_api::types::Object<RecordDeletedData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.richtext` namespace.
33+pub mod facet;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.richtext.facet` namespace.
33+///Annotation of a sub-string within rich text.
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct MainData {
77+ pub features: Vec<atrium_api::types::Union<MainFeaturesItem>>,
88+ pub index: ByteSlice,
99+}
1010+pub type Main = atrium_api::types::Object<MainData>;
1111+///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.
1212+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1313+#[serde(rename_all = "camelCase")]
1414+pub struct ByteSliceData {
1515+ pub byte_end: usize,
1616+ pub byte_start: usize,
1717+}
1818+pub type ByteSlice = atrium_api::types::Object<ByteSliceData>;
1919+///Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.
2020+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2121+#[serde(rename_all = "camelCase")]
2222+pub struct LinkData {
2323+ pub uri: String,
2424+}
2525+pub type Link = atrium_api::types::Object<LinkData>;
2626+///Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.
2727+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2828+#[serde(rename_all = "camelCase")]
2929+pub struct MentionData {
3030+ pub did: atrium_api::types::string::Did,
3131+}
3232+pub type Mention = atrium_api::types::Object<MentionData>;
3333+///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').
3434+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
3535+#[serde(rename_all = "camelCase")]
3636+pub struct TagData {
3737+ pub tag: String,
3838+}
3939+pub type Tag = atrium_api::types::Object<TagData>;
4040+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4141+#[serde(tag = "$type")]
4242+pub enum MainFeaturesItem {
4343+ #[serde(rename = "app.bsky.richtext.facet#mention")]
4444+ Mention(Box<Mention>),
4545+ #[serde(rename = "app.bsky.richtext.facet#link")]
4646+ Link(Box<Link>),
4747+ #[serde(rename = "app.bsky.richtext.facet#tag")]
4848+ Tag(Box<Tag>),
4949+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.unspecced` namespace.
33+pub mod defs;
44+pub mod get_config;
55+pub mod get_popular_feed_generators;
66+pub mod get_suggested_feeds;
77+pub mod get_suggested_feeds_skeleton;
88+pub mod get_suggested_starter_packs;
99+pub mod get_suggested_starter_packs_skeleton;
1010+pub mod get_suggested_users;
1111+pub mod get_suggested_users_skeleton;
1212+pub mod get_suggestions_skeleton;
1313+pub mod get_tagged_suggestions;
1414+pub mod get_trending_topics;
1515+pub mod get_trends;
1616+pub mod get_trends_skeleton;
1717+pub mod search_actors_skeleton;
1818+pub mod search_posts_skeleton;
1919+pub mod search_starter_packs_skeleton;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.unspecced.getSuggestionsSkeleton` namespace.
33+pub const NSID: &str = "app.bsky.unspecced.getSuggestionsSkeleton";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
88+ pub cursor: core::option::Option<String>,
99+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1010+ pub limit: core::option::Option<atrium_api::types::LimitedNonZeroU8<100u8>>,
1111+ ///DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer.
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub relative_to_did: core::option::Option<atrium_api::types::string::Did>,
1414+ ///DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.
1515+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1616+ pub viewer: core::option::Option<atrium_api::types::string::Did>,
1717+}
1818+pub type Parameters = atrium_api::types::Object<ParametersData>;
1919+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2020+#[serde(rename_all = "camelCase")]
2121+pub struct OutputData {
2222+ pub actors: Vec<crate::app::bsky::unspecced::defs::SkeletonSearchActor>,
2323+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2424+ pub cursor: core::option::Option<String>,
2525+ ///Snowflake for this recommendation, use when submitting recommendation events.
2626+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2727+ pub rec_id: core::option::Option<i64>,
2828+ ///DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer.
2929+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3030+ pub relative_to_did: core::option::Option<atrium_api::types::string::Did>,
3131+}
3232+pub type Output = atrium_api::types::Object<OutputData>;
3333+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
3434+#[serde(tag = "error", content = "message")]
3535+pub enum Error {}
3636+impl std::fmt::Display for Error {
3737+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
3838+ Ok(())
3939+ }
4040+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.unspecced.searchPostsSkeleton` namespace.
33+pub const NSID: &str = "app.bsky.unspecced.searchPostsSkeleton";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///Filter to posts by the given account. Handles are resolved to DID before query-time.
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub author: core::option::Option<atrium_api::types::string::AtIdentifier>,
1010+ ///Optional pagination mechanism; may not necessarily allow scrolling through entire result set.
1111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1212+ pub cursor: core::option::Option<String>,
1313+ ///Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.
1414+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1515+ pub domain: core::option::Option<String>,
1616+ ///Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.
1717+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1818+ pub lang: core::option::Option<atrium_api::types::string::Language>,
1919+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2020+ pub limit: core::option::Option<atrium_api::types::LimitedNonZeroU8<100u8>>,
2121+ ///Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.
2222+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2323+ pub mentions: core::option::Option<atrium_api::types::string::AtIdentifier>,
2424+ ///Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.
2525+ pub q: String,
2626+ ///Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).
2727+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2828+ pub since: core::option::Option<String>,
2929+ ///Specifies the ranking order of results.
3030+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3131+ pub sort: core::option::Option<String>,
3232+ ///Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.
3333+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3434+ pub tag: core::option::Option<Vec<String>>,
3535+ ///Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).
3636+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3737+ pub until: core::option::Option<String>,
3838+ ///Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.
3939+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4040+ pub url: core::option::Option<String>,
4141+ ///DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries.
4242+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4343+ pub viewer: core::option::Option<atrium_api::types::string::Did>,
4444+}
4545+pub type Parameters = atrium_api::types::Object<ParametersData>;
4646+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4747+#[serde(rename_all = "camelCase")]
4848+pub struct OutputData {
4949+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5050+ pub cursor: core::option::Option<String>,
5151+ ///Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.
5252+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5353+ pub hits_total: core::option::Option<i64>,
5454+ pub posts: Vec<crate::app::bsky::unspecced::defs::SkeletonSearchPost>,
5555+}
5656+pub type Output = atrium_api::types::Object<OutputData>;
5757+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5858+#[serde(tag = "error", content = "message")]
5959+pub enum Error {
6060+ BadQueryString(Option<String>),
6161+}
6262+impl std::fmt::Display for Error {
6363+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
6464+ match self {
6565+ Error::BadQueryString(msg) => {
6666+ write!(_f, "BadQueryString")?;
6767+ if let Some(msg) = msg {
6868+ write!(_f, ": {msg}")?;
6969+ }
7070+ }
7171+ }
7272+ Ok(())
7373+ }
7474+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.video` namespace.
33+pub mod defs;
44+pub mod get_job_status;
55+pub mod get_upload_limits;
66+pub mod upload_video;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.video.defs` namespace.
33+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
44+#[serde(rename_all = "camelCase")]
55+pub struct JobStatusData {
66+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
77+ pub blob: core::option::Option<atrium_api::types::BlobRef>,
88+ pub did: atrium_api::types::string::Did,
99+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1010+ pub error: core::option::Option<String>,
1111+ pub job_id: String,
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub message: core::option::Option<String>,
1414+ ///Progress within the current processing state.
1515+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1616+ pub progress: core::option::Option<atrium_api::types::LimitedU8<100u8>>,
1717+ ///The state of the video processing job. All values not listed as a known value indicate that the job is in process.
1818+ pub state: String,
1919+}
2020+pub type JobStatus = atrium_api::types::Object<JobStatusData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `app.bsky.video.uploadVideo` namespace.
33+pub const NSID: &str = "app.bsky.video.uploadVideo";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct OutputData {
77+ pub job_status: crate::app::bsky::video::defs::JobStatus,
88+}
99+pub type Output = atrium_api::types::Object<OutputData>;
1010+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1111+#[serde(tag = "error", content = "message")]
1212+pub enum Error {}
1313+impl std::fmt::Display for Error {
1414+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
1515+ Ok(())
1616+ }
1717+}
+3
crates/weaver-common/src/lexicons/chat.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat` namespace.
33+pub mod bsky;
+5
crates/weaver-common/src/lexicons/chat/bsky.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat.bsky` namespace.
33+pub mod actor;
44+pub mod convo;
55+pub mod moderation;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat.bsky.actor` namespace.
33+pub mod declaration;
44+pub mod defs;
55+pub mod delete_account;
66+pub mod export_account_data;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat.bsky.convo` namespace.
33+pub mod accept_convo;
44+pub mod add_reaction;
55+pub mod defs;
66+pub mod delete_message_for_self;
77+pub mod get_convo;
88+pub mod get_convo_availability;
99+pub mod get_convo_for_members;
1010+pub mod get_log;
1111+pub mod get_messages;
1212+pub mod leave_convo;
1313+pub mod list_convos;
1414+pub mod mute_convo;
1515+pub mod remove_reaction;
1616+pub mod send_message;
1717+pub mod send_message_batch;
1818+pub mod unmute_convo;
1919+pub mod update_all_read;
2020+pub mod update_read;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat.bsky.convo.addReaction` namespace.
33+pub const NSID: &str = "chat.bsky.convo.addReaction";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct InputData {
77+ pub convo_id: String,
88+ pub message_id: String,
99+ pub value: String,
1010+}
1111+pub type Input = atrium_api::types::Object<InputData>;
1212+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1313+#[serde(rename_all = "camelCase")]
1414+pub struct OutputData {
1515+ pub message: crate::chat::bsky::convo::defs::MessageView,
1616+}
1717+pub type Output = atrium_api::types::Object<OutputData>;
1818+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1919+#[serde(tag = "error", content = "message")]
2020+pub enum Error {
2121+ ///Indicates that the message has been deleted and reactions can no longer be added/removed.
2222+ ReactionMessageDeleted(Option<String>),
2323+ ///Indicates that the message has the maximum number of reactions allowed for a single user, and the requested reaction wasn't yet present. If it was already present, the request will not fail since it is idempotent.
2424+ ReactionLimitReached(Option<String>),
2525+ ///Indicates the value for the reaction is not acceptable. In general, this means it is not an emoji.
2626+ ReactionInvalidValue(Option<String>),
2727+}
2828+impl std::fmt::Display for Error {
2929+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
3030+ match self {
3131+ Error::ReactionMessageDeleted(msg) => {
3232+ write!(_f, "ReactionMessageDeleted")?;
3333+ if let Some(msg) = msg {
3434+ write!(_f, ": {msg}")?;
3535+ }
3636+ }
3737+ Error::ReactionLimitReached(msg) => {
3838+ write!(_f, "ReactionLimitReached")?;
3939+ if let Some(msg) = msg {
4040+ write!(_f, ": {msg}")?;
4141+ }
4242+ }
4343+ Error::ReactionInvalidValue(msg) => {
4444+ write!(_f, "ReactionInvalidValue")?;
4545+ if let Some(msg) = msg {
4646+ write!(_f, ": {msg}")?;
4747+ }
4848+ }
4949+ }
5050+ Ok(())
5151+ }
5252+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `chat.bsky.moderation` namespace.
33+pub mod get_actor_metadata;
44+pub mod get_message_context;
55+pub mod update_actor_access;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com` namespace.
33+pub mod atproto;
+11
crates/weaver-common/src/lexicons/com/atproto.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto` namespace.
33+pub mod admin;
44+pub mod identity;
55+pub mod label;
66+pub mod lexicon;
77+pub mod moderation;
88+pub mod repo;
99+pub mod server;
1010+pub mod sync;
1111+pub mod temp;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.admin` namespace.
33+pub mod defs;
44+pub mod delete_account;
55+pub mod disable_account_invites;
66+pub mod disable_invite_codes;
77+pub mod enable_account_invites;
88+pub mod get_account_info;
99+pub mod get_account_infos;
1010+pub mod get_invite_codes;
1111+pub mod get_subject_status;
1212+pub mod search_accounts;
1313+pub mod send_email;
1414+pub mod update_account_email;
1515+pub mod update_account_handle;
1616+pub mod update_account_password;
1717+pub mod update_account_signing_key;
1818+pub mod update_subject_status;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.identity` namespace.
33+pub mod defs;
44+pub mod get_recommended_did_credentials;
55+pub mod refresh_identity;
66+pub mod request_plc_operation_signature;
77+pub mod resolve_did;
88+pub mod resolve_handle;
99+pub mod resolve_identity;
1010+pub mod sign_plc_operation;
1111+pub mod submit_plc_operation;
1212+pub mod update_handle;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.identity.defs` namespace.
33+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
44+#[serde(rename_all = "camelCase")]
55+pub struct IdentityInfoData {
66+ pub did: atrium_api::types::string::Did,
77+ ///The complete DID document for the identity.
88+ pub did_doc: atrium_api::types::Unknown,
99+ ///The validated handle of the account; or 'handle.invalid' if the handle did not bi-directionally match the DID document.
1010+ pub handle: atrium_api::types::string::Handle,
1111+}
1212+pub type IdentityInfo = atrium_api::types::Object<IdentityInfoData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.label` namespace.
33+pub mod defs;
44+pub mod query_labels;
55+pub mod subscribe_labels;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.label.defs` namespace.
33+///Metadata tag on an atproto resource (eg, repo or record).
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct LabelData {
77+ ///Optionally, CID specifying the specific version of 'uri' resource this label applies to.
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub cid: core::option::Option<atrium_api::types::string::Cid>,
1010+ ///Timestamp when this label was created.
1111+ pub cts: atrium_api::types::string::Datetime,
1212+ ///Timestamp at which this label expires (no longer applies).
1313+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1414+ pub exp: core::option::Option<atrium_api::types::string::Datetime>,
1515+ ///If true, this is a negation label, overwriting a previous label.
1616+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1717+ pub neg: core::option::Option<bool>,
1818+ ///Signature of dag-cbor encoded label.
1919+ #[serde(default)]
2020+ #[serde(with = "serde_bytes")]
2121+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2222+ pub sig: core::option::Option<Vec<u8>>,
2323+ ///DID of the actor who created this label.
2424+ pub src: atrium_api::types::string::Did,
2525+ ///AT URI of the record, repository (account), or other resource that this label applies to.
2626+ pub uri: String,
2727+ ///The short string name of the value or type of this label.
2828+ pub val: String,
2929+ ///The AT Protocol version of the label object.
3030+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3131+ pub ver: core::option::Option<i64>,
3232+}
3333+pub type Label = atrium_api::types::Object<LabelData>;
3434+pub type LabelValue = String;
3535+///Declares a label value and its expected interpretations and behaviors.
3636+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
3737+#[serde(rename_all = "camelCase")]
3838+pub struct LabelValueDefinitionData {
3939+ ///Does the user need to have adult content enabled in order to configure this label?
4040+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4141+ pub adult_only: core::option::Option<bool>,
4242+ ///What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.
4343+ pub blurs: String,
4444+ ///The default setting for this label.
4545+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4646+ pub default_setting: core::option::Option<String>,
4747+ ///The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).
4848+ pub identifier: String,
4949+ pub locales: Vec<LabelValueDefinitionStrings>,
5050+ ///How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.
5151+ pub severity: String,
5252+}
5353+pub type LabelValueDefinition = atrium_api::types::Object<LabelValueDefinitionData>;
5454+///Strings which describe the label in the UI, localized into a specific language.
5555+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5656+#[serde(rename_all = "camelCase")]
5757+pub struct LabelValueDefinitionStringsData {
5858+ ///A longer description of what the label means and why it might be applied.
5959+ pub description: String,
6060+ ///The code of the language these strings are written in.
6161+ pub lang: atrium_api::types::string::Language,
6262+ ///A short human-readable name for the label.
6363+ pub name: String,
6464+}
6565+pub type LabelValueDefinitionStrings = atrium_api::types::Object<
6666+ LabelValueDefinitionStringsData,
6767+>;
6868+///Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.
6969+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
7070+#[serde(rename_all = "camelCase")]
7171+pub struct SelfLabelData {
7272+ ///The short string name of the value or type of this label.
7373+ pub val: String,
7474+}
7575+pub type SelfLabel = atrium_api::types::Object<SelfLabelData>;
7676+///Metadata tags on an atproto record, published by the author within the record.
7777+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
7878+#[serde(rename_all = "camelCase")]
7979+pub struct SelfLabelsData {
8080+ pub values: Vec<SelfLabel>,
8181+}
8282+pub type SelfLabels = atrium_api::types::Object<SelfLabelsData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.lexicon` namespace.
33+pub mod schema;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.lexicon.schema` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ ///Indicates the 'version' of the Lexicon language. Must be '1' for the current atproto/Lexicon schema system.
88+ pub lexicon: i64,
99+}
1010+pub type Record = atrium_api::types::Object<RecordData>;
1111+impl From<atrium_api::types::Unknown> for RecordData {
1212+ fn from(value: atrium_api::types::Unknown) -> Self {
1313+ Self::try_from_unknown(value).unwrap()
1414+ }
1515+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.moderation` namespace.
33+pub mod create_report;
44+pub mod defs;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.moderation.defs` namespace.
33+///Appeal: appeal a previously taken moderation action
44+pub const REASON_APPEAL: &str = "com.atproto.moderation.defs#reasonAppeal";
55+///Misleading identity, affiliation, or content
66+pub const REASON_MISLEADING: &str = "com.atproto.moderation.defs#reasonMisleading";
77+///Other: reports not falling under another report category
88+pub const REASON_OTHER: &str = "com.atproto.moderation.defs#reasonOther";
99+///Rude, harassing, explicit, or otherwise unwelcoming behavior
1010+pub const REASON_RUDE: &str = "com.atproto.moderation.defs#reasonRude";
1111+///Unwanted or mislabeled sexual content
1212+pub const REASON_SEXUAL: &str = "com.atproto.moderation.defs#reasonSexual";
1313+///Spam: frequent unwanted promotion, replies, mentions
1414+pub const REASON_SPAM: &str = "com.atproto.moderation.defs#reasonSpam";
1515+pub type ReasonType = String;
1616+///Direct violation of server rules, laws, terms of service
1717+pub const REASON_VIOLATION: &str = "com.atproto.moderation.defs#reasonViolation";
1818+///Tag describing a type of subject that might be reported.
1919+pub type SubjectType = String;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.repo` namespace.
33+pub mod apply_writes;
44+pub mod create_record;
55+pub mod defs;
66+pub mod delete_record;
77+pub mod describe_repo;
88+pub mod get_record;
99+pub mod import_repo;
1010+pub mod list_missing_blobs;
1111+pub mod list_records;
1212+pub mod put_record;
1313+pub mod strong_ref;
1414+pub mod upload_blob;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.repo.strongRef` namespace.
33+//!A URI with a content-hash fingerprint.
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct MainData {
77+ pub cid: atrium_api::types::string::Cid,
88+ pub uri: String,
99+}
1010+pub type Main = atrium_api::types::Object<MainData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.server` namespace.
33+pub mod activate_account;
44+pub mod check_account_status;
55+pub mod confirm_email;
66+pub mod create_account;
77+pub mod create_app_password;
88+pub mod create_invite_code;
99+pub mod create_invite_codes;
1010+pub mod create_session;
1111+pub mod deactivate_account;
1212+pub mod defs;
1313+pub mod delete_account;
1414+pub mod delete_session;
1515+pub mod describe_server;
1616+pub mod get_account_invite_codes;
1717+pub mod get_service_auth;
1818+pub mod get_session;
1919+pub mod list_app_passwords;
2020+pub mod refresh_session;
2121+pub mod request_account_delete;
2222+pub mod request_email_confirmation;
2323+pub mod request_email_update;
2424+pub mod request_password_reset;
2525+pub mod reserve_signing_key;
2626+pub mod reset_password;
2727+pub mod revoke_app_password;
2828+pub mod update_email;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.server.getServiceAuth` namespace.
33+pub const NSID: &str = "com.atproto.server.getServiceAuth";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///The DID of the service that the token will be used to authenticate with
88+ pub aud: atrium_api::types::string::Did,
99+ ///The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope.
1010+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1111+ pub exp: core::option::Option<i64>,
1212+ ///Lexicon (XRPC) method to bind the requested token to
1313+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1414+ pub lxm: core::option::Option<atrium_api::types::string::Nsid>,
1515+}
1616+pub type Parameters = atrium_api::types::Object<ParametersData>;
1717+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1818+#[serde(rename_all = "camelCase")]
1919+pub struct OutputData {
2020+ pub token: String,
2121+}
2222+pub type Output = atrium_api::types::Object<OutputData>;
2323+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2424+#[serde(tag = "error", content = "message")]
2525+pub enum Error {
2626+ ///Indicates that the requested expiration date is not a valid. May be in the past or may be reliant on the requested scopes.
2727+ BadExpiration(Option<String>),
2828+}
2929+impl std::fmt::Display for Error {
3030+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
3131+ match self {
3232+ Error::BadExpiration(msg) => {
3333+ write!(_f, "BadExpiration")?;
3434+ if let Some(msg) = msg {
3535+ write!(_f, ": {msg}")?;
3636+ }
3737+ }
3838+ }
3939+ Ok(())
4040+ }
4141+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.sync` namespace.
33+pub mod defs;
44+pub mod get_blob;
55+pub mod get_blocks;
66+pub mod get_checkout;
77+pub mod get_head;
88+pub mod get_host_status;
99+pub mod get_latest_commit;
1010+pub mod get_record;
1111+pub mod get_repo;
1212+pub mod get_repo_status;
1313+pub mod list_blobs;
1414+pub mod list_hosts;
1515+pub mod list_repos;
1616+pub mod list_repos_by_collection;
1717+pub mod notify_of_update;
1818+pub mod request_crawl;
1919+pub mod subscribe_repos;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.sync.defs` namespace.
33+pub type HostStatus = String;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.sync.getRepoStatus` namespace.
33+pub const NSID: &str = "com.atproto.sync.getRepoStatus";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///The DID of the repo.
88+ pub did: atrium_api::types::string::Did,
99+}
1010+pub type Parameters = atrium_api::types::Object<ParametersData>;
1111+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1212+#[serde(rename_all = "camelCase")]
1313+pub struct OutputData {
1414+ pub active: bool,
1515+ pub did: atrium_api::types::string::Did,
1616+ ///Optional field, the current rev of the repo, if active=true
1717+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1818+ pub rev: core::option::Option<atrium_api::types::string::Tid>,
1919+ ///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.
2020+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2121+ pub status: core::option::Option<String>,
2222+}
2323+pub type Output = atrium_api::types::Object<OutputData>;
2424+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
2525+#[serde(tag = "error", content = "message")]
2626+pub enum Error {
2727+ RepoNotFound(Option<String>),
2828+}
2929+impl std::fmt::Display for Error {
3030+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
3131+ match self {
3232+ Error::RepoNotFound(msg) => {
3333+ write!(_f, "RepoNotFound")?;
3434+ if let Some(msg) = msg {
3535+ write!(_f, ": {msg}")?;
3636+ }
3737+ }
3838+ }
3939+ Ok(())
4040+ }
4141+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.sync.subscribeRepos` namespace.
33+pub const NSID: &str = "com.atproto.sync.subscribeRepos";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///The last known event seq number to backfill from.
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub cursor: core::option::Option<i64>,
1010+}
1111+pub type Parameters = atrium_api::types::Object<ParametersData>;
1212+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1313+#[serde(tag = "error", content = "message")]
1414+pub enum Error {
1515+ FutureCursor(Option<String>),
1616+ ///If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection.
1717+ ConsumerTooSlow(Option<String>),
1818+}
1919+impl std::fmt::Display for Error {
2020+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
2121+ match self {
2222+ Error::FutureCursor(msg) => {
2323+ write!(_f, "FutureCursor")?;
2424+ if let Some(msg) = msg {
2525+ write!(_f, ": {msg}")?;
2626+ }
2727+ }
2828+ Error::ConsumerTooSlow(msg) => {
2929+ write!(_f, "ConsumerTooSlow")?;
3030+ if let Some(msg) = msg {
3131+ write!(_f, ": {msg}")?;
3232+ }
3333+ }
3434+ }
3535+ Ok(())
3636+ }
3737+}
3838+///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.
3939+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4040+#[serde(rename_all = "camelCase")]
4141+pub struct AccountData {
4242+ ///Indicates that the account has a repository which can be fetched from the host that emitted this event.
4343+ pub active: bool,
4444+ pub did: atrium_api::types::string::Did,
4545+ pub seq: i64,
4646+ ///If active=false, this optional field indicates a reason for why the account is not active.
4747+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4848+ pub status: core::option::Option<String>,
4949+ pub time: atrium_api::types::string::Datetime,
5050+}
5151+pub type Account = atrium_api::types::Object<AccountData>;
5252+///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.
5353+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5454+#[serde(rename_all = "camelCase")]
5555+pub struct CommitData {
5656+ pub blobs: Vec<atrium_api::types::CidLink>,
5757+ ///CAR file containing relevant blocks, as a diff since the previous repo state. The commit must be included as a block, and the commit block CID must be the first entry in the CAR header 'roots' list.
5858+ #[serde(with = "serde_bytes")]
5959+ pub blocks: Vec<u8>,
6060+ ///Repo commit object CID.
6161+ pub commit: atrium_api::types::CidLink,
6262+ pub ops: Vec<RepoOp>,
6363+ ///The root CID of the MST tree for the previous commit from this repo (indicated by the 'since' revision field in this message). Corresponds to the 'data' field in the repo commit object. NOTE: this field is effectively required for the 'inductive' version of firehose.
6464+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6565+ pub prev_data: core::option::Option<atrium_api::types::CidLink>,
6666+ ///DEPRECATED -- unused
6767+ pub rebase: bool,
6868+ ///The repo this event comes from. Note that all other message types name this field 'did'.
6969+ pub repo: atrium_api::types::string::Did,
7070+ ///The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event.
7171+ pub rev: atrium_api::types::string::Tid,
7272+ ///The stream sequence number of this message.
7373+ pub seq: i64,
7474+ ///The rev of the last emitted commit from this repo (if any).
7575+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
7676+ pub since: core::option::Option<atrium_api::types::string::Tid>,
7777+ ///Timestamp of when this message was originally broadcast.
7878+ pub time: atrium_api::types::string::Datetime,
7979+ ///DEPRECATED -- replaced by #sync event and data limits. 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.
8080+ pub too_big: bool,
8181+}
8282+pub type Commit = atrium_api::types::Object<CommitData>;
8383+///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.
8484+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
8585+#[serde(rename_all = "camelCase")]
8686+pub struct IdentityData {
8787+ pub did: atrium_api::types::string::Did,
8888+ ///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.
8989+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9090+ pub handle: core::option::Option<atrium_api::types::string::Handle>,
9191+ pub seq: i64,
9292+ pub time: atrium_api::types::string::Datetime,
9393+}
9494+pub type Identity = atrium_api::types::Object<IdentityData>;
9595+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
9696+#[serde(rename_all = "camelCase")]
9797+pub struct InfoData {
9898+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9999+ pub message: core::option::Option<String>,
100100+ pub name: String,
101101+}
102102+pub type Info = atrium_api::types::Object<InfoData>;
103103+///A repo operation, ie a mutation of a single record.
104104+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
105105+#[serde(rename_all = "camelCase")]
106106+pub struct RepoOpData {
107107+ pub action: String,
108108+ ///For creates and updates, the new record CID. For deletions, null.
109109+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
110110+ pub cid: core::option::Option<atrium_api::types::CidLink>,
111111+ pub path: String,
112112+ ///For updates and deletes, the previous record CID (required for inductive firehose). For creations, field should not be defined.
113113+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
114114+ pub prev: core::option::Option<atrium_api::types::CidLink>,
115115+}
116116+pub type RepoOp = atrium_api::types::Object<RepoOpData>;
117117+///Updates the repo to a new state, without necessarily including that state on the firehose. Used to recover from broken commit streams, data loss incidents, or in situations where upstream host does not know recent state of the repository.
118118+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
119119+#[serde(rename_all = "camelCase")]
120120+pub struct SyncData {
121121+ ///CAR file containing the commit, as a block. The CAR header must include the commit block CID as the first 'root'.
122122+ #[serde(with = "serde_bytes")]
123123+ pub blocks: Vec<u8>,
124124+ ///The account this repo event corresponds to. Must match that in the commit object.
125125+ pub did: atrium_api::types::string::Did,
126126+ ///The rev of the commit. This value must match that in the commit object.
127127+ pub rev: String,
128128+ ///The stream sequence number of this message.
129129+ pub seq: i64,
130130+ ///Timestamp of when this message was originally broadcast.
131131+ pub time: atrium_api::types::string::Datetime,
132132+}
133133+pub type Sync = atrium_api::types::Object<SyncData>;
134134+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
135135+#[serde(tag = "$type")]
136136+pub enum Message {
137137+ #[serde(rename = "com.atproto.sync.subscribeRepos#commit")]
138138+ Commit(Box<Commit>),
139139+ #[serde(rename = "com.atproto.sync.subscribeRepos#sync")]
140140+ Sync(Box<Sync>),
141141+ #[serde(rename = "com.atproto.sync.subscribeRepos#identity")]
142142+ Identity(Box<Identity>),
143143+ #[serde(rename = "com.atproto.sync.subscribeRepos#account")]
144144+ Account(Box<Account>),
145145+ #[serde(rename = "com.atproto.sync.subscribeRepos#info")]
146146+ Info(Box<Info>),
147147+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.temp` namespace.
33+pub mod add_reserved_handle;
44+pub mod check_signup_queue;
55+pub mod fetch_labels;
66+pub mod request_phone_verification;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `com.atproto.temp.requestPhoneVerification` namespace.
33+pub const NSID: &str = "com.atproto.temp.requestPhoneVerification";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct InputData {
77+ pub phone_number: String,
88+}
99+pub type Input = atrium_api::types::Object<InputData>;
1010+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1111+#[serde(tag = "error", content = "message")]
1212+pub enum Error {}
1313+impl std::fmt::Display for Error {
1414+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
1515+ Ok(())
1616+ }
1717+}
+3
crates/weaver-common/src/lexicons/mod.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+pub mod record;
33+pub mod sh;
+27
crates/weaver-common/src/lexicons/record.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!A collection of known record types.
33+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
44+#[serde(tag = "$type")]
55+pub enum KnownRecord {
66+ #[serde(rename = "sh.tangled.actor.profile")]
77+ LexiconsShTangledActorProfile(
88+ Box<crate::lexicons::sh::tangled::actor::profile::Record>,
99+ ),
1010+}
1111+impl From<crate::lexicons::sh::tangled::actor::profile::Record> for KnownRecord {
1212+ fn from(record: crate::lexicons::sh::tangled::actor::profile::Record) -> Self {
1313+ KnownRecord::LexiconsShTangledActorProfile(Box::new(record))
1414+ }
1515+}
1616+impl From<crate::lexicons::sh::tangled::actor::profile::RecordData> for KnownRecord {
1717+ fn from(
1818+ record_data: crate::lexicons::sh::tangled::actor::profile::RecordData,
1919+ ) -> Self {
2020+ KnownRecord::LexiconsShTangledActorProfile(Box::new(record_data.into()))
2121+ }
2222+}
2323+impl Into<atrium_api::types::Unknown> for KnownRecord {
2424+ fn into(self) -> atrium_api::types::Unknown {
2525+ atrium_api::types::TryIntoUnknown::try_into_unknown(&self).unwrap()
2626+ }
2727+}
+4
crates/weaver-common/src/lexicons/sh.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh` namespace.
33+pub mod tangled;
44+pub mod weaver;
+3
crates/weaver-common/src/lexicons/sh/tangled.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.tangled` namespace.
33+pub mod actor;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.tangled.actor` namespace.
33+pub mod profile;
44+#[derive(Debug)]
55+pub struct Profile;
66+impl atrium_api::types::Collection for Profile {
77+ const NSID: &'static str = "sh.tangled.actor.profile";
88+ type Record = profile::Record;
99+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.tangled.actor.profile` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ ///Include link to this account on Bluesky.
88+ pub bluesky: bool,
99+ ///Free-form profile description text.
1010+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1111+ pub description: core::option::Option<String>,
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub links: core::option::Option<Vec<String>>,
1414+ ///Free-form location text.
1515+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1616+ pub location: core::option::Option<String>,
1717+ ///Any ATURI, it is up to appviews to validate these fields.
1818+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1919+ pub pinned_repositories: core::option::Option<Vec<String>>,
2020+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2121+ pub stats: core::option::Option<Vec<String>>,
2222+}
2323+pub type Record = atrium_api::types::Object<RecordData>;
2424+impl From<atrium_api::types::Unknown> for RecordData {
2525+ fn from(value: atrium_api::types::Unknown) -> Self {
2626+ Self::try_from_unknown(value).unwrap()
2727+ }
2828+}
+5
crates/weaver-common/src/lexicons/sh/weaver.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver` namespace.
33+pub mod actor;
44+pub mod embed;
55+pub mod notebook;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver.actor` namespace.
33+pub mod defs;
44+pub mod profile;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver.embed` namespace.
33+pub mod defs;
44+pub mod images;
55+pub mod record_with_media;
66+pub mod records;
77+pub mod video;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver.embed.defs` namespace.
33+///Proportional size of the embed relative to the viewport in larger windows. The dimensions are percentage out of 100. Could we use more granularity? Maybe, but come on.
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct PercentSizeData {
77+ pub height: i64,
88+ pub width: i64,
99+}
1010+pub type PercentSize = atrium_api::types::Object<PercentSizeData>;
1111+///Pixel-exact embed size. The dimensions are logical pixels, subject to scaling, so 200px at X2 scale is 400px.
1212+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1313+#[serde(rename_all = "camelCase")]
1414+pub struct PixelSizeData {
1515+ pub height: i64,
1616+ pub width: i64,
1717+}
1818+pub type PixelSize = atrium_api::types::Object<PixelSizeData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver.notebook` namespace.
33+pub mod authors;
44+pub mod defs;
55+pub mod entry;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `sh.weaver.notebook.entry` namespace.
33+use atrium_api::types::TryFromUnknown;
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct RecordData {
77+ ///The content of the notebook entry. This should be some flavor of Markdown.
88+ pub content: String,
99+ pub created_at: CreatedAt,
1010+ ///The set of images, if any, embedded in the notebook entry.
1111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1212+ pub images: core::option::Option<crate::sh::weaver::embed::images::Main>,
1313+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1414+ pub tags: core::option::Option<Tags>,
1515+ pub title: Title,
1616+}
1717+pub type Record = atrium_api::types::Object<RecordData>;
1818+impl From<atrium_api::types::Unknown> for RecordData {
1919+ fn from(value: atrium_api::types::Unknown) -> Self {
2020+ Self::try_from_unknown(value).unwrap()
2121+ }
2222+}
2323+///The date and time when the notebook entry was created. This is used for sorting and displaying the entry's creation date.
2424+pub type CreatedAt = String;
2525+///An array of tags associated with the notebook entry. Tags can help categorize and organize entries.
2626+pub type Tags = Vec<String>;
2727+///The title of the notebook entry.
2828+pub type Title = String;
+3
crates/weaver-common/src/lexicons/tools.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools` namespace.
33+pub mod ozone;
+11
crates/weaver-common/src/lexicons/tools/ozone.rs
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone` namespace.
33+pub mod communication;
44+pub mod hosting;
55+pub mod moderation;
66+pub mod server;
77+pub mod set;
88+pub mod setting;
99+pub mod signature;
1010+pub mod team;
1111+pub mod verification;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.communication` namespace.
33+pub mod create_template;
44+pub mod defs;
55+pub mod delete_template;
66+pub mod list_templates;
77+pub mod update_template;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.communication.defs` namespace.
33+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
44+#[serde(rename_all = "camelCase")]
55+pub struct TemplateViewData {
66+ ///Subject of the message, used in emails.
77+ pub content_markdown: String,
88+ pub created_at: atrium_api::types::string::Datetime,
99+ pub disabled: bool,
1010+ pub id: String,
1111+ ///Message language.
1212+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1313+ pub lang: core::option::Option<atrium_api::types::string::Language>,
1414+ ///DID of the user who last updated the template.
1515+ pub last_updated_by: atrium_api::types::string::Did,
1616+ ///Name of the template.
1717+ pub name: String,
1818+ ///Content of the template, can contain markdown and variable placeholders.
1919+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2020+ pub subject: core::option::Option<String>,
2121+ pub updated_at: atrium_api::types::string::Datetime,
2222+}
2323+pub type TemplateView = atrium_api::types::Object<TemplateViewData>;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.hosting` namespace.
33+pub mod get_account_history;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.moderation` namespace.
33+pub mod defs;
44+pub mod emit_event;
55+pub mod get_event;
66+pub mod get_record;
77+pub mod get_records;
88+pub mod get_repo;
99+pub mod get_reporter_stats;
1010+pub mod get_repos;
1111+pub mod get_subjects;
1212+pub mod query_events;
1313+pub mod query_statuses;
1414+pub mod search_repos;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.moderation.queryEvents` namespace.
33+pub const NSID: &str = "tools.ozone.moderation.queryEvents";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///If specified, only events where all of these labels were added are returned
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub added_labels: core::option::Option<Vec<String>>,
1010+ ///If specified, only events where all of these tags were added are returned
1111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1212+ pub added_tags: core::option::Option<Vec<String>>,
1313+ ///If specified, only events where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored.
1414+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1515+ pub collections: core::option::Option<Vec<atrium_api::types::string::Nsid>>,
1616+ ///If specified, only events with comments containing the keyword are returned. Apply || separator to use multiple keywords and match using OR condition.
1717+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1818+ pub comment: core::option::Option<String>,
1919+ ///Retrieve events created after a given timestamp
2020+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2121+ pub created_after: core::option::Option<atrium_api::types::string::Datetime>,
2222+ ///Retrieve events created before a given timestamp
2323+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2424+ pub created_before: core::option::Option<atrium_api::types::string::Datetime>,
2525+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2626+ pub created_by: core::option::Option<atrium_api::types::string::Did>,
2727+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2828+ pub cursor: core::option::Option<String>,
2929+ ///If true, only events with comments are returned
3030+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3131+ pub has_comment: core::option::Option<bool>,
3232+ ///If true, events on all record types (posts, lists, profile etc.) or records from given 'collections' param, owned by the did are returned.
3333+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3434+ pub include_all_user_records: core::option::Option<bool>,
3535+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3636+ pub limit: core::option::Option<atrium_api::types::LimitedNonZeroU8<100u8>>,
3737+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3838+ pub policies: core::option::Option<Vec<String>>,
3939+ ///If specified, only events where all of these labels were removed are returned
4040+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4141+ pub removed_labels: core::option::Option<Vec<String>>,
4242+ ///If specified, only events where all of these tags were removed are returned
4343+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4444+ pub removed_tags: core::option::Option<Vec<String>>,
4545+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4646+ pub report_types: core::option::Option<Vec<String>>,
4747+ ///Sort direction for the events. Defaults to descending order of created at timestamp.
4848+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4949+ pub sort_direction: core::option::Option<String>,
5050+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5151+ pub subject: core::option::Option<String>,
5252+ ///If specified, only events where the subject is of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored.
5353+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5454+ pub subject_type: core::option::Option<String>,
5555+ ///The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent<name>) to filter by. If not specified, all events are returned.
5656+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5757+ pub types: core::option::Option<Vec<String>>,
5858+}
5959+pub type Parameters = atrium_api::types::Object<ParametersData>;
6060+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
6161+#[serde(rename_all = "camelCase")]
6262+pub struct OutputData {
6363+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6464+ pub cursor: core::option::Option<String>,
6565+ pub events: Vec<crate::tools::ozone::moderation::defs::ModEventView>,
6666+}
6767+pub type Output = atrium_api::types::Object<OutputData>;
6868+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
6969+#[serde(tag = "error", content = "message")]
7070+pub enum Error {}
7171+impl std::fmt::Display for Error {
7272+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
7373+ Ok(())
7474+ }
7575+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.moderation.queryStatuses` namespace.
33+pub const NSID: &str = "tools.ozone.moderation.queryStatuses";
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct ParametersData {
77+ ///Get subjects in unresolved appealed status
88+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
99+ pub appealed: core::option::Option<bool>,
1010+ ///If specified, subjects belonging to the given collections will be returned. When subjectType is set to 'account', this will be ignored.
1111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1212+ pub collections: core::option::Option<Vec<atrium_api::types::string::Nsid>>,
1313+ ///Search subjects by keyword from comments
1414+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1515+ pub comment: core::option::Option<String>,
1616+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1717+ pub cursor: core::option::Option<String>,
1818+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1919+ pub exclude_tags: core::option::Option<Vec<String>>,
2020+ ///Search subjects where the associated record/account was deleted after a given timestamp
2121+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2222+ pub hosting_deleted_after: core::option::Option<atrium_api::types::string::Datetime>,
2323+ ///Search subjects where the associated record/account was deleted before a given timestamp
2424+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2525+ pub hosting_deleted_before: core::option::Option<
2626+ atrium_api::types::string::Datetime,
2727+ >,
2828+ ///Search subjects by the status of the associated record/account
2929+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3030+ pub hosting_statuses: core::option::Option<Vec<String>>,
3131+ ///Search subjects where the associated record/account was updated after a given timestamp
3232+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3333+ pub hosting_updated_after: core::option::Option<atrium_api::types::string::Datetime>,
3434+ ///Search subjects where the associated record/account was updated before a given timestamp
3535+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3636+ pub hosting_updated_before: core::option::Option<
3737+ atrium_api::types::string::Datetime,
3838+ >,
3939+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4040+ pub ignore_subjects: core::option::Option<Vec<String>>,
4141+ ///All subjects, or subjects from given 'collections' param, belonging to the account specified in the 'subject' param will be returned.
4242+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4343+ pub include_all_user_records: core::option::Option<bool>,
4444+ ///By default, we don't include muted subjects in the results. Set this to true to include them.
4545+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4646+ pub include_muted: core::option::Option<bool>,
4747+ ///Get all subject statuses that were reviewed by a specific moderator
4848+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
4949+ pub last_reviewed_by: core::option::Option<atrium_api::types::string::Did>,
5050+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5151+ pub limit: core::option::Option<atrium_api::types::LimitedNonZeroU8<100u8>>,
5252+ ///If specified, only subjects that belong to an account that has at least this many suspensions will be returned.
5353+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5454+ pub min_account_suspend_count: core::option::Option<i64>,
5555+ ///If specified, only subjects that have priority score value above the given value will be returned.
5656+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
5757+ pub min_priority_score: core::option::Option<atrium_api::types::LimitedU8<100u8>>,
5858+ ///If specified, only subjects that belong to an account that has at least this many reported records will be returned.
5959+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6060+ pub min_reported_records_count: core::option::Option<i64>,
6161+ ///If specified, only subjects that belong to an account that has at least this many taken down records will be returned.
6262+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6363+ pub min_takendown_records_count: core::option::Option<i64>,
6464+ ///When set to true, only muted subjects and reporters will be returned.
6565+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6666+ pub only_muted: core::option::Option<bool>,
6767+ ///Number of queues being used by moderators. Subjects will be split among all queues.
6868+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
6969+ pub queue_count: core::option::Option<i64>,
7070+ ///Index of the queue to fetch subjects from. Works only when queueCount value is specified.
7171+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
7272+ pub queue_index: core::option::Option<i64>,
7373+ ///A seeder to shuffle/balance the queue items.
7474+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
7575+ pub queue_seed: core::option::Option<String>,
7676+ ///Search subjects reported after a given timestamp
7777+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
7878+ pub reported_after: core::option::Option<atrium_api::types::string::Datetime>,
7979+ ///Search subjects reported before a given timestamp
8080+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
8181+ pub reported_before: core::option::Option<atrium_api::types::string::Datetime>,
8282+ ///Specify when fetching subjects in a certain state
8383+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
8484+ pub review_state: core::option::Option<String>,
8585+ ///Search subjects reviewed after a given timestamp
8686+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
8787+ pub reviewed_after: core::option::Option<atrium_api::types::string::Datetime>,
8888+ ///Search subjects reviewed before a given timestamp
8989+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9090+ pub reviewed_before: core::option::Option<atrium_api::types::string::Datetime>,
9191+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9292+ pub sort_direction: core::option::Option<String>,
9393+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9494+ pub sort_field: core::option::Option<String>,
9595+ ///The subject to get the status for.
9696+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
9797+ pub subject: core::option::Option<String>,
9898+ ///If specified, subjects of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When includeAllUserRecords or subject is set, this will be ignored.
9999+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
100100+ pub subject_type: core::option::Option<String>,
101101+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
102102+ pub tags: core::option::Option<Vec<String>>,
103103+ ///Get subjects that were taken down
104104+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
105105+ pub takendown: core::option::Option<bool>,
106106+}
107107+pub type Parameters = atrium_api::types::Object<ParametersData>;
108108+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
109109+#[serde(rename_all = "camelCase")]
110110+pub struct OutputData {
111111+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
112112+ pub cursor: core::option::Option<String>,
113113+ pub subject_statuses: Vec<crate::tools::ozone::moderation::defs::SubjectStatusView>,
114114+}
115115+pub type Output = atrium_api::types::Object<OutputData>;
116116+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
117117+#[serde(tag = "error", content = "message")]
118118+pub enum Error {}
119119+impl std::fmt::Display for Error {
120120+ fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
121121+ Ok(())
122122+ }
123123+}
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.server` namespace.
33+pub mod get_config;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.set` namespace.
33+pub mod add_values;
44+pub mod defs;
55+pub mod delete_set;
66+pub mod delete_values;
77+pub mod get_values;
88+pub mod query_sets;
99+pub mod upsert_set;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.setting` namespace.
33+pub mod defs;
44+pub mod list_options;
55+pub mod remove_options;
66+pub mod upsert_option;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.signature` namespace.
33+pub mod defs;
44+pub mod find_correlation;
55+pub mod find_related_accounts;
66+pub mod search_accounts;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.team` namespace.
33+pub mod add_member;
44+pub mod defs;
55+pub mod delete_member;
66+pub mod list_members;
77+pub mod update_member;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.verification` namespace.
33+pub mod defs;
44+pub mod grant_verifications;
55+pub mod list_verifications;
66+pub mod revoke_verifications;
···11+// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
22+//!Definitions for the `tools.ozone.verification.defs` namespace.
33+///Verification data for the associated subject.
44+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55+#[serde(rename_all = "camelCase")]
66+pub struct VerificationViewData {
77+ ///Timestamp when the verification was created.
88+ pub created_at: atrium_api::types::string::Datetime,
99+ ///Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying.
1010+ pub display_name: String,
1111+ ///Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying.
1212+ pub handle: atrium_api::types::string::Handle,
1313+ ///The user who issued this verification.
1414+ pub issuer: atrium_api::types::string::Did,
1515+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
1616+ pub issuer_profile: core::option::Option<
1717+ atrium_api::types::Union<VerificationViewIssuerProfileRefs>,
1818+ >,
1919+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2020+ pub issuer_repo: core::option::Option<
2121+ atrium_api::types::Union<VerificationViewIssuerRepoRefs>,
2222+ >,
2323+ ///Describes the reason for revocation, also indicating that the verification is no longer valid.
2424+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2525+ pub revoke_reason: core::option::Option<String>,
2626+ ///Timestamp when the verification was revoked.
2727+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
2828+ pub revoked_at: core::option::Option<atrium_api::types::string::Datetime>,
2929+ ///The user who revoked this verification.
3030+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3131+ pub revoked_by: core::option::Option<atrium_api::types::string::Did>,
3232+ ///The subject of the verification.
3333+ pub subject: atrium_api::types::string::Did,
3434+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3535+ pub subject_profile: core::option::Option<
3636+ atrium_api::types::Union<VerificationViewSubjectProfileRefs>,
3737+ >,
3838+ #[serde(skip_serializing_if = "core::option::Option::is_none")]
3939+ pub subject_repo: core::option::Option<
4040+ atrium_api::types::Union<VerificationViewSubjectRepoRefs>,
4141+ >,
4242+ ///The AT-URI of the verification record.
4343+ pub uri: String,
4444+}
4545+pub type VerificationView = atrium_api::types::Object<VerificationViewData>;
4646+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4747+#[serde(tag = "$type")]
4848+pub enum VerificationViewIssuerProfileRefs {}
4949+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5050+#[serde(tag = "$type")]
5151+pub enum VerificationViewIssuerRepoRefs {
5252+ #[serde(rename = "tools.ozone.moderation.defs#repoViewDetail")]
5353+ ToolsOzoneModerationDefsRepoViewDetail(
5454+ Box<crate::tools::ozone::moderation::defs::RepoViewDetail>,
5555+ ),
5656+ #[serde(rename = "tools.ozone.moderation.defs#repoViewNotFound")]
5757+ ToolsOzoneModerationDefsRepoViewNotFound(
5858+ Box<crate::tools::ozone::moderation::defs::RepoViewNotFound>,
5959+ ),
6060+}
6161+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
6262+#[serde(tag = "$type")]
6363+pub enum VerificationViewSubjectProfileRefs {}
6464+#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
6565+#[serde(tag = "$type")]
6666+pub enum VerificationViewSubjectRepoRefs {
6767+ #[serde(rename = "tools.ozone.moderation.defs#repoViewDetail")]
6868+ ToolsOzoneModerationDefsRepoViewDetail(
6969+ Box<crate::tools::ozone::moderation::defs::RepoViewDetail>,
7070+ ),
7171+ #[serde(rename = "tools.ozone.moderation.defs#repoViewNotFound")]
7272+ ToolsOzoneModerationDefsRepoViewNotFound(
7373+ Box<crate::tools::ozone::moderation::defs::RepoViewNotFound>,
7474+ ),
7575+}
···11-{
22- "lexicon": 1,
33- "id": "sh.weaver.blog.post",
44- "defs": {
55- "main": {
66- "type": "record",
77- "description": "A blog entry",
88- "key": "tid",
99- "record": {
1010- "type": "object",
1111- "required": [
1212- "content", "title", "createdAt"
1313- ],
1414- "properties": {
1515- "title": { "type": "ref", "ref": "#title" },
1616- "tags": { "type": "ref", "ref": "#tags" },
1717-1818- "content": {
1919- "type": "string",
2020- "maxLength": 200000,
2121- "description": "The content of the blog post. This should be some flavor of Markdown."
2222- },
2323-2424- "createdAt": {
2525- "type": "ref",
2626- "ref": "#createdAt"
2727- },
2828- "images": {
2929- "type": "ref",
3030- "ref": "sh.weaver.blog.embed.images",
3131- "description": "The set of images, if any, embedded in the blog post."
3232- },
3333- }
3434- }
3535- },
3636-3737- "createdAt": {
3838- "type": "string",
3939- "format": "datetime",
4040- "description": "The date and time when the blog post was created. This is used for sorting and displaying the post's creation date."
4141- },
4242- "title": {
4343- "type": "string",
4444- "maxLength": 420,
4545- "description": "The title of the blog post."
4646- },
4747- "tags": {
4848- "type": "array",
4949- "items": {
5050- "type": "string",
5151- "maxLength": 64
5252- },
5353- "maxLength": 10,
5454- "description": "An array of tags associated with the blog post. Tags can help categorize and organize posts."
5555- }
5656- }
5757-}
-30
lexicons/sh.weaver.embed.defs.json
···11-{
22- "lexicon": 1,
33- "id": "sh.weaver.embed.defs",
44- "defs": {
55- "percentSize": {
66- "type": "object",
77- "required": ["width", "height"],
88- "properties": {
99- "width": { "type": "integer" },
1010- "height": { "type": "integer" },
1111- },
1212- "description": "Proportional size of the embed relative to the viewport in larger windows. The dimensions are percentage out of 100. Could we use more granularity? Maybe, but come on."
1313- },
1414- "pixelSize": {
1515- "type": "object",
1616- "required": ["width", "height"],
1717- "properties": {
1818- "width": { "type": "integer" },
1919- "height": { "type": "integer" },
2020- },
2121- "description": "Pixel-exact embed size. The dimensions are logical pixels, subject to scaling, so 200px at X2 scale is 400px."
2222- },
2323- "record": {
2424-2525- },
2626- "externa": {
2727-2828- }
2929- }
3030- }
-19
lexicons/sh.weaver.embed.external.json
···11-{
22- "lexicon": 1,
33- "id": "sh.weaver.embed.records",
44- "description": "A set of records embedded in a blog post.",
55- "defs": {
66- "main": {
77- "type": "object",
88- "required": ["records"],
99- "properties": {
1010- "images": {
1111- "type": "array",
1212- "items": { "type": "ref", "ref": "#sh.weaver.embed.defs#external" },
1313- "maxLength": 48
1414- }
1515- }
1616- },
1717-1818- }
1919- }
-46
lexicons/sh.weaver.embed.images.json
···11-{
22- "lexicon": 1,
33- "id": "sh.weaver.embed.images",
44- "description": "A set of images embedded in a blog post.",
55- "defs": {
66- "main": {
77- "type": "object",
88- "required": ["images"],
99- "properties": {
1010- "images": {
1111- "type": "array",
1212- "items": { "type": "ref", "ref": "#image" },
1313- "maxLength": 48
1414- }
1515- }
1616- },
1717- "image": {
1818- "type": "object",
1919- "required": ["image"],
2020- "properties": {
2121- "image": {
2222- "type": "blob",
2323- "accept": ["image/*"],
2424- "maxSize": 3000000
2525- },
2626- "alt": {
2727- "type": "string",
2828- "description": "alt text description of the image"
2929- },
3030- "blurhash": {
3131- "type": "string",
3232- "maxLength": 32,
3333- "description": "Blurhash string for the image, used for low-resolution placeholders. This must be a valid Blurhash string."
3434- },
3535- "dimensions": {
3636- "type": "union",
3737- "refs": [
3838- "app.bsky.embed.defs#aspectRatio",
3939- "sh.weaver.embed.defs#percentSize",
4040- "sh.weaver.embed.defs#pixelSize"
4141- ]
4242- }
4343- }
4444- },
4545- }
4646- }
-19
lexicons/sh.weaver.embed.record.json
···11-{
22- "lexicon": 1,
33- "id": "computer.nonbinary.embed.records",
44- "description": "A set of records embedded in a blog post.",
55- "defs": {
66- "main": {
77- "type": "object",
88- "required": ["records"],
99- "properties": {
1010- "images": {
1111- "type": "array",
1212- "items": { "type": "ref", "ref": "#computer.nonbinary.embed.defs#record" },
1313- "maxLength": 48
1414- }
1515- }
1616- },
1717-1818- }
1919- }