1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: tools.ozone.moderation.defs
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8pub mod emit_event;
9pub mod get_account_timeline;
10pub mod get_event;
11pub mod get_record;
12pub mod get_records;
13pub mod get_repo;
14pub mod get_reporter_stats;
15pub mod get_repos;
16pub mod get_subjects;
17pub mod query_events;
18pub mod query_statuses;
19pub mod search_repos;
20
21///Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
22#[jacquard_derive::lexicon]
23#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
24#[serde(rename_all = "camelCase")]
25pub struct AccountEvent<'a> {
26 ///Indicates that the account has a repository which can be fetched from the host that emitted this event.
27 pub active: bool,
28 #[serde(skip_serializing_if = "std::option::Option::is_none")]
29 #[serde(borrow)]
30 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
31 #[serde(skip_serializing_if = "std::option::Option::is_none")]
32 #[serde(borrow)]
33 pub status: std::option::Option<jacquard_common::CowStr<'a>>,
34 pub timestamp: jacquard_common::types::string::Datetime,
35}
36
37impl jacquard_common::IntoStatic for AccountEvent<'_> {
38 type Output = AccountEvent<'static>;
39 fn into_static(self) -> Self::Output {
40 AccountEvent {
41 active: self.active.into_static(),
42 comment: self.comment.into_static(),
43 status: self.status.into_static(),
44 timestamp: self.timestamp.into_static(),
45 extra_data: self.extra_data.into_static(),
46 }
47 }
48}
49
50#[jacquard_derive::lexicon]
51#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
52#[serde(rename_all = "camelCase")]
53pub struct AccountHosting<'a> {
54 #[serde(skip_serializing_if = "std::option::Option::is_none")]
55 pub created_at: std::option::Option<jacquard_common::types::string::Datetime>,
56 #[serde(skip_serializing_if = "std::option::Option::is_none")]
57 pub deactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
58 #[serde(skip_serializing_if = "std::option::Option::is_none")]
59 pub deleted_at: std::option::Option<jacquard_common::types::string::Datetime>,
60 #[serde(skip_serializing_if = "std::option::Option::is_none")]
61 pub reactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
62 #[serde(borrow)]
63 pub status: jacquard_common::CowStr<'a>,
64 #[serde(skip_serializing_if = "std::option::Option::is_none")]
65 pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>,
66}
67
68impl jacquard_common::IntoStatic for AccountHosting<'_> {
69 type Output = AccountHosting<'static>;
70 fn into_static(self) -> Self::Output {
71 AccountHosting {
72 created_at: self.created_at.into_static(),
73 deactivated_at: self.deactivated_at.into_static(),
74 deleted_at: self.deleted_at.into_static(),
75 reactivated_at: self.reactivated_at.into_static(),
76 status: self.status.into_static(),
77 updated_at: self.updated_at.into_static(),
78 extra_data: self.extra_data.into_static(),
79 }
80 }
81}
82
83///Statistics about a particular account subject
84#[jacquard_derive::lexicon]
85#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
86#[serde(rename_all = "camelCase")]
87pub struct AccountStats<'a> {
88 ///Total number of appeals against a moderation action on the account
89 #[serde(skip_serializing_if = "std::option::Option::is_none")]
90 pub appeal_count: std::option::Option<i64>,
91 ///Number of times the account was escalated
92 #[serde(skip_serializing_if = "std::option::Option::is_none")]
93 pub escalate_count: std::option::Option<i64>,
94 ///Total number of reports on the account
95 #[serde(skip_serializing_if = "std::option::Option::is_none")]
96 pub report_count: std::option::Option<i64>,
97 ///Number of times the account was suspended
98 #[serde(skip_serializing_if = "std::option::Option::is_none")]
99 pub suspend_count: std::option::Option<i64>,
100 ///Number of times the account was taken down
101 #[serde(skip_serializing_if = "std::option::Option::is_none")]
102 pub takedown_count: std::option::Option<i64>,
103}
104
105impl jacquard_common::IntoStatic for AccountStats<'_> {
106 type Output = AccountStats<'static>;
107 fn into_static(self) -> Self::Output {
108 AccountStats {
109 appeal_count: self.appeal_count.into_static(),
110 escalate_count: self.escalate_count.into_static(),
111 report_count: self.report_count.into_static(),
112 suspend_count: self.suspend_count.into_static(),
113 takedown_count: self.takedown_count.into_static(),
114 extra_data: self.extra_data.into_static(),
115 }
116 }
117}
118
119///Age assurance info coming directly from users. Only works on DID subjects.
120#[jacquard_derive::lexicon]
121#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
122#[serde(rename_all = "camelCase")]
123pub struct AgeAssuranceEvent<'a> {
124 ///The unique identifier for this instance of the age assurance flow, in UUID format.
125 #[serde(borrow)]
126 pub attempt_id: jacquard_common::CowStr<'a>,
127 ///The IP address used when completing the AA flow.
128 #[serde(skip_serializing_if = "std::option::Option::is_none")]
129 #[serde(borrow)]
130 pub complete_ip: std::option::Option<jacquard_common::CowStr<'a>>,
131 ///The user agent used when completing the AA flow.
132 #[serde(skip_serializing_if = "std::option::Option::is_none")]
133 #[serde(borrow)]
134 pub complete_ua: std::option::Option<jacquard_common::CowStr<'a>>,
135 ///The date and time of this write operation.
136 pub created_at: jacquard_common::types::string::Datetime,
137 ///The IP address used when initiating the AA flow.
138 #[serde(skip_serializing_if = "std::option::Option::is_none")]
139 #[serde(borrow)]
140 pub init_ip: std::option::Option<jacquard_common::CowStr<'a>>,
141 ///The user agent used when initiating the AA flow.
142 #[serde(skip_serializing_if = "std::option::Option::is_none")]
143 #[serde(borrow)]
144 pub init_ua: std::option::Option<jacquard_common::CowStr<'a>>,
145 ///The status of the age assurance process.
146 #[serde(borrow)]
147 pub status: jacquard_common::CowStr<'a>,
148}
149
150impl jacquard_common::IntoStatic for AgeAssuranceEvent<'_> {
151 type Output = AgeAssuranceEvent<'static>;
152 fn into_static(self) -> Self::Output {
153 AgeAssuranceEvent {
154 attempt_id: self.attempt_id.into_static(),
155 complete_ip: self.complete_ip.into_static(),
156 complete_ua: self.complete_ua.into_static(),
157 created_at: self.created_at.into_static(),
158 init_ip: self.init_ip.into_static(),
159 init_ua: self.init_ua.into_static(),
160 status: self.status.into_static(),
161 extra_data: self.extra_data.into_static(),
162 }
163 }
164}
165
166///Age assurance status override by moderators. Only works on DID subjects.
167#[jacquard_derive::lexicon]
168#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
169#[serde(rename_all = "camelCase")]
170pub struct AgeAssuranceOverrideEvent<'a> {
171 ///Comment describing the reason for the override.
172 #[serde(borrow)]
173 pub comment: jacquard_common::CowStr<'a>,
174 ///The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.
175 #[serde(borrow)]
176 pub status: jacquard_common::CowStr<'a>,
177}
178
179impl jacquard_common::IntoStatic for AgeAssuranceOverrideEvent<'_> {
180 type Output = AgeAssuranceOverrideEvent<'static>;
181 fn into_static(self) -> Self::Output {
182 AgeAssuranceOverrideEvent {
183 comment: self.comment.into_static(),
184 status: self.status.into_static(),
185 extra_data: self.extra_data.into_static(),
186 }
187 }
188}
189
190#[jacquard_derive::lexicon]
191#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
192#[serde(rename_all = "camelCase")]
193pub struct BlobView<'a> {
194 #[serde(borrow)]
195 pub cid: jacquard_common::types::string::Cid<'a>,
196 pub created_at: jacquard_common::types::string::Datetime,
197 #[serde(skip_serializing_if = "std::option::Option::is_none")]
198 #[serde(borrow)]
199 pub details: std::option::Option<BlobViewRecordDetails<'a>>,
200 #[serde(borrow)]
201 pub mime_type: jacquard_common::CowStr<'a>,
202 #[serde(skip_serializing_if = "std::option::Option::is_none")]
203 #[serde(borrow)]
204 pub moderation: std::option::Option<crate::tools_ozone::moderation::Moderation<'a>>,
205 pub size: i64,
206}
207
208#[jacquard_derive::open_union]
209#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
210#[serde(tag = "$type")]
211#[serde(bound(deserialize = "'de: 'a"))]
212pub enum BlobViewRecordDetails<'a> {}
213impl jacquard_common::IntoStatic for BlobViewRecordDetails<'_> {
214 type Output = BlobViewRecordDetails<'static>;
215 fn into_static(self) -> Self::Output {
216 match self {
217 BlobViewRecordDetails::Unknown(v) => {
218 BlobViewRecordDetails::Unknown(v.into_static())
219 }
220 }
221 }
222}
223
224impl jacquard_common::IntoStatic for BlobView<'_> {
225 type Output = BlobView<'static>;
226 fn into_static(self) -> Self::Output {
227 BlobView {
228 cid: self.cid.into_static(),
229 created_at: self.created_at.into_static(),
230 details: self.details.into_static(),
231 mime_type: self.mime_type.into_static(),
232 moderation: self.moderation.into_static(),
233 size: self.size.into_static(),
234 extra_data: self.extra_data.into_static(),
235 }
236 }
237}
238
239///Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
240#[jacquard_derive::lexicon]
241#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
242#[serde(rename_all = "camelCase")]
243pub struct IdentityEvent<'a> {
244 #[serde(skip_serializing_if = "std::option::Option::is_none")]
245 #[serde(borrow)]
246 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
247 #[serde(skip_serializing_if = "std::option::Option::is_none")]
248 #[serde(borrow)]
249 pub handle: std::option::Option<jacquard_common::types::string::Handle<'a>>,
250 #[serde(skip_serializing_if = "std::option::Option::is_none")]
251 #[serde(borrow)]
252 pub pds_host: std::option::Option<jacquard_common::types::string::Uri<'a>>,
253 pub timestamp: jacquard_common::types::string::Datetime,
254 #[serde(skip_serializing_if = "std::option::Option::is_none")]
255 pub tombstone: std::option::Option<bool>,
256}
257
258impl jacquard_common::IntoStatic for IdentityEvent<'_> {
259 type Output = IdentityEvent<'static>;
260 fn into_static(self) -> Self::Output {
261 IdentityEvent {
262 comment: self.comment.into_static(),
263 handle: self.handle.into_static(),
264 pds_host: self.pds_host.into_static(),
265 timestamp: self.timestamp.into_static(),
266 tombstone: self.tombstone.into_static(),
267 extra_data: self.extra_data.into_static(),
268 }
269 }
270}
271
272#[jacquard_derive::lexicon]
273#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
274#[serde(rename_all = "camelCase")]
275pub struct ImageDetails<'a> {
276 pub height: i64,
277 pub width: i64,
278}
279
280impl jacquard_common::IntoStatic for ImageDetails<'_> {
281 type Output = ImageDetails<'static>;
282 fn into_static(self) -> Self::Output {
283 ImageDetails {
284 height: self.height.into_static(),
285 width: self.width.into_static(),
286 extra_data: self.extra_data.into_static(),
287 }
288 }
289}
290
291#[jacquard_derive::lexicon]
292#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
293#[serde(rename_all = "camelCase")]
294pub struct ModEventAcknowledge<'a> {
295 ///If true, all other reports on content authored by this account will be resolved (acknowledged).
296 #[serde(skip_serializing_if = "std::option::Option::is_none")]
297 pub acknowledge_account_subjects: std::option::Option<bool>,
298 #[serde(skip_serializing_if = "std::option::Option::is_none")]
299 #[serde(borrow)]
300 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
301}
302
303impl jacquard_common::IntoStatic for ModEventAcknowledge<'_> {
304 type Output = ModEventAcknowledge<'static>;
305 fn into_static(self) -> Self::Output {
306 ModEventAcknowledge {
307 acknowledge_account_subjects: self
308 .acknowledge_account_subjects
309 .into_static(),
310 comment: self.comment.into_static(),
311 extra_data: self.extra_data.into_static(),
312 }
313 }
314}
315
316///Add a comment to a subject. An empty comment will clear any previously set sticky comment.
317#[jacquard_derive::lexicon]
318#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
319#[serde(rename_all = "camelCase")]
320pub struct ModEventComment<'a> {
321 #[serde(skip_serializing_if = "std::option::Option::is_none")]
322 #[serde(borrow)]
323 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
324 ///Make the comment persistent on the subject
325 #[serde(skip_serializing_if = "std::option::Option::is_none")]
326 pub sticky: std::option::Option<bool>,
327}
328
329impl jacquard_common::IntoStatic for ModEventComment<'_> {
330 type Output = ModEventComment<'static>;
331 fn into_static(self) -> Self::Output {
332 ModEventComment {
333 comment: self.comment.into_static(),
334 sticky: self.sticky.into_static(),
335 extra_data: self.extra_data.into_static(),
336 }
337 }
338}
339
340///Divert a record's blobs to a 3rd party service for further scanning/tagging
341#[jacquard_derive::lexicon]
342#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
343#[serde(rename_all = "camelCase")]
344pub struct ModEventDivert<'a> {
345 #[serde(skip_serializing_if = "std::option::Option::is_none")]
346 #[serde(borrow)]
347 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
348}
349
350impl jacquard_common::IntoStatic for ModEventDivert<'_> {
351 type Output = ModEventDivert<'static>;
352 fn into_static(self) -> Self::Output {
353 ModEventDivert {
354 comment: self.comment.into_static(),
355 extra_data: self.extra_data.into_static(),
356 }
357 }
358}
359
360///Keep a log of outgoing email to a user
361#[jacquard_derive::lexicon]
362#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
363#[serde(rename_all = "camelCase")]
364pub struct ModEventEmail<'a> {
365 ///Additional comment about the outgoing comm.
366 #[serde(skip_serializing_if = "std::option::Option::is_none")]
367 #[serde(borrow)]
368 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
369 ///The content of the email sent to the user.
370 #[serde(skip_serializing_if = "std::option::Option::is_none")]
371 #[serde(borrow)]
372 pub content: std::option::Option<jacquard_common::CowStr<'a>>,
373 ///The subject line of the email sent to the user.
374 #[serde(borrow)]
375 pub subject_line: jacquard_common::CowStr<'a>,
376}
377
378impl jacquard_common::IntoStatic for ModEventEmail<'_> {
379 type Output = ModEventEmail<'static>;
380 fn into_static(self) -> Self::Output {
381 ModEventEmail {
382 comment: self.comment.into_static(),
383 content: self.content.into_static(),
384 subject_line: self.subject_line.into_static(),
385 extra_data: self.extra_data.into_static(),
386 }
387 }
388}
389
390#[jacquard_derive::lexicon]
391#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
392#[serde(rename_all = "camelCase")]
393pub struct ModEventEscalate<'a> {
394 #[serde(skip_serializing_if = "std::option::Option::is_none")]
395 #[serde(borrow)]
396 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
397}
398
399impl jacquard_common::IntoStatic for ModEventEscalate<'_> {
400 type Output = ModEventEscalate<'static>;
401 fn into_static(self) -> Self::Output {
402 ModEventEscalate {
403 comment: self.comment.into_static(),
404 extra_data: self.extra_data.into_static(),
405 }
406 }
407}
408
409///Apply/Negate labels on a subject
410#[jacquard_derive::lexicon]
411#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
412#[serde(rename_all = "camelCase")]
413pub struct ModEventLabel<'a> {
414 #[serde(skip_serializing_if = "std::option::Option::is_none")]
415 #[serde(borrow)]
416 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
417 #[serde(borrow)]
418 pub create_label_vals: Vec<jacquard_common::CowStr<'a>>,
419 ///Indicates how long the label will remain on the subject. Only applies on labels that are being added.
420 #[serde(skip_serializing_if = "std::option::Option::is_none")]
421 pub duration_in_hours: std::option::Option<i64>,
422 #[serde(borrow)]
423 pub negate_label_vals: Vec<jacquard_common::CowStr<'a>>,
424}
425
426impl jacquard_common::IntoStatic for ModEventLabel<'_> {
427 type Output = ModEventLabel<'static>;
428 fn into_static(self) -> Self::Output {
429 ModEventLabel {
430 comment: self.comment.into_static(),
431 create_label_vals: self.create_label_vals.into_static(),
432 duration_in_hours: self.duration_in_hours.into_static(),
433 negate_label_vals: self.negate_label_vals.into_static(),
434 extra_data: self.extra_data.into_static(),
435 }
436 }
437}
438
439///Mute incoming reports on a subject
440#[jacquard_derive::lexicon]
441#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
442#[serde(rename_all = "camelCase")]
443pub struct ModEventMute<'a> {
444 #[serde(skip_serializing_if = "std::option::Option::is_none")]
445 #[serde(borrow)]
446 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
447 ///Indicates how long the subject should remain muted.
448 pub duration_in_hours: i64,
449}
450
451impl jacquard_common::IntoStatic for ModEventMute<'_> {
452 type Output = ModEventMute<'static>;
453 fn into_static(self) -> Self::Output {
454 ModEventMute {
455 comment: self.comment.into_static(),
456 duration_in_hours: self.duration_in_hours.into_static(),
457 extra_data: self.extra_data.into_static(),
458 }
459 }
460}
461
462///Mute incoming reports from an account
463#[jacquard_derive::lexicon]
464#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
465#[serde(rename_all = "camelCase")]
466pub struct ModEventMuteReporter<'a> {
467 #[serde(skip_serializing_if = "std::option::Option::is_none")]
468 #[serde(borrow)]
469 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
470 ///Indicates how long the account should remain muted. Falsy value here means a permanent mute.
471 #[serde(skip_serializing_if = "std::option::Option::is_none")]
472 pub duration_in_hours: std::option::Option<i64>,
473}
474
475impl jacquard_common::IntoStatic for ModEventMuteReporter<'_> {
476 type Output = ModEventMuteReporter<'static>;
477 fn into_static(self) -> Self::Output {
478 ModEventMuteReporter {
479 comment: self.comment.into_static(),
480 duration_in_hours: self.duration_in_hours.into_static(),
481 extra_data: self.extra_data.into_static(),
482 }
483 }
484}
485
486///Set priority score of the subject. Higher score means higher priority.
487#[jacquard_derive::lexicon]
488#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
489#[serde(rename_all = "camelCase")]
490pub struct ModEventPriorityScore<'a> {
491 #[serde(skip_serializing_if = "std::option::Option::is_none")]
492 #[serde(borrow)]
493 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
494 pub score: i64,
495}
496
497impl jacquard_common::IntoStatic for ModEventPriorityScore<'_> {
498 type Output = ModEventPriorityScore<'static>;
499 fn into_static(self) -> Self::Output {
500 ModEventPriorityScore {
501 comment: self.comment.into_static(),
502 score: self.score.into_static(),
503 extra_data: self.extra_data.into_static(),
504 }
505 }
506}
507
508///Report a subject
509#[jacquard_derive::lexicon]
510#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
511#[serde(rename_all = "camelCase")]
512pub struct ModEventReport<'a> {
513 #[serde(skip_serializing_if = "std::option::Option::is_none")]
514 #[serde(borrow)]
515 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
516 ///Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject.
517 #[serde(skip_serializing_if = "std::option::Option::is_none")]
518 pub is_reporter_muted: std::option::Option<bool>,
519 #[serde(borrow)]
520 pub report_type: crate::com_atproto::moderation::ReasonType<'a>,
521}
522
523impl jacquard_common::IntoStatic for ModEventReport<'_> {
524 type Output = ModEventReport<'static>;
525 fn into_static(self) -> Self::Output {
526 ModEventReport {
527 comment: self.comment.into_static(),
528 is_reporter_muted: self.is_reporter_muted.into_static(),
529 report_type: self.report_type.into_static(),
530 extra_data: self.extra_data.into_static(),
531 }
532 }
533}
534
535///Resolve appeal on a subject
536#[jacquard_derive::lexicon]
537#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
538#[serde(rename_all = "camelCase")]
539pub struct ModEventResolveAppeal<'a> {
540 ///Describe resolution.
541 #[serde(skip_serializing_if = "std::option::Option::is_none")]
542 #[serde(borrow)]
543 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
544}
545
546impl jacquard_common::IntoStatic for ModEventResolveAppeal<'_> {
547 type Output = ModEventResolveAppeal<'static>;
548 fn into_static(self) -> Self::Output {
549 ModEventResolveAppeal {
550 comment: self.comment.into_static(),
551 extra_data: self.extra_data.into_static(),
552 }
553 }
554}
555
556///Revert take down action on a subject
557#[jacquard_derive::lexicon]
558#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
559#[serde(rename_all = "camelCase")]
560pub struct ModEventReverseTakedown<'a> {
561 ///Describe reasoning behind the reversal.
562 #[serde(skip_serializing_if = "std::option::Option::is_none")]
563 #[serde(borrow)]
564 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
565}
566
567impl jacquard_common::IntoStatic for ModEventReverseTakedown<'_> {
568 type Output = ModEventReverseTakedown<'static>;
569 fn into_static(self) -> Self::Output {
570 ModEventReverseTakedown {
571 comment: self.comment.into_static(),
572 extra_data: self.extra_data.into_static(),
573 }
574 }
575}
576
577///Add/Remove a tag on a subject
578#[jacquard_derive::lexicon]
579#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
580#[serde(rename_all = "camelCase")]
581pub struct ModEventTag<'a> {
582 ///Tags to be added to the subject. If already exists, won't be duplicated.
583 #[serde(borrow)]
584 pub add: Vec<jacquard_common::CowStr<'a>>,
585 ///Additional comment about added/removed tags.
586 #[serde(skip_serializing_if = "std::option::Option::is_none")]
587 #[serde(borrow)]
588 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
589 ///Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated.
590 #[serde(borrow)]
591 pub remove: Vec<jacquard_common::CowStr<'a>>,
592}
593
594impl jacquard_common::IntoStatic for ModEventTag<'_> {
595 type Output = ModEventTag<'static>;
596 fn into_static(self) -> Self::Output {
597 ModEventTag {
598 add: self.add.into_static(),
599 comment: self.comment.into_static(),
600 remove: self.remove.into_static(),
601 extra_data: self.extra_data.into_static(),
602 }
603 }
604}
605
606///Take down a subject permanently or temporarily
607#[jacquard_derive::lexicon]
608#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
609#[serde(rename_all = "camelCase")]
610pub struct ModEventTakedown<'a> {
611 ///If true, all other reports on content authored by this account will be resolved (acknowledged).
612 #[serde(skip_serializing_if = "std::option::Option::is_none")]
613 pub acknowledge_account_subjects: std::option::Option<bool>,
614 #[serde(skip_serializing_if = "std::option::Option::is_none")]
615 #[serde(borrow)]
616 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
617 ///Indicates how long the takedown should be in effect before automatically expiring.
618 #[serde(skip_serializing_if = "std::option::Option::is_none")]
619 pub duration_in_hours: std::option::Option<i64>,
620 ///Names/Keywords of the policies that drove the decision.
621 #[serde(skip_serializing_if = "std::option::Option::is_none")]
622 #[serde(borrow)]
623 pub policies: std::option::Option<Vec<jacquard_common::CowStr<'a>>>,
624}
625
626impl jacquard_common::IntoStatic for ModEventTakedown<'_> {
627 type Output = ModEventTakedown<'static>;
628 fn into_static(self) -> Self::Output {
629 ModEventTakedown {
630 acknowledge_account_subjects: self
631 .acknowledge_account_subjects
632 .into_static(),
633 comment: self.comment.into_static(),
634 duration_in_hours: self.duration_in_hours.into_static(),
635 policies: self.policies.into_static(),
636 extra_data: self.extra_data.into_static(),
637 }
638 }
639}
640
641///Unmute action on a subject
642#[jacquard_derive::lexicon]
643#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
644#[serde(rename_all = "camelCase")]
645pub struct ModEventUnmute<'a> {
646 ///Describe reasoning behind the reversal.
647 #[serde(skip_serializing_if = "std::option::Option::is_none")]
648 #[serde(borrow)]
649 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
650}
651
652impl jacquard_common::IntoStatic for ModEventUnmute<'_> {
653 type Output = ModEventUnmute<'static>;
654 fn into_static(self) -> Self::Output {
655 ModEventUnmute {
656 comment: self.comment.into_static(),
657 extra_data: self.extra_data.into_static(),
658 }
659 }
660}
661
662///Unmute incoming reports from an account
663#[jacquard_derive::lexicon]
664#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
665#[serde(rename_all = "camelCase")]
666pub struct ModEventUnmuteReporter<'a> {
667 ///Describe reasoning behind the reversal.
668 #[serde(skip_serializing_if = "std::option::Option::is_none")]
669 #[serde(borrow)]
670 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
671}
672
673impl jacquard_common::IntoStatic for ModEventUnmuteReporter<'_> {
674 type Output = ModEventUnmuteReporter<'static>;
675 fn into_static(self) -> Self::Output {
676 ModEventUnmuteReporter {
677 comment: self.comment.into_static(),
678 extra_data: self.extra_data.into_static(),
679 }
680 }
681}
682
683#[jacquard_derive::lexicon]
684#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
685#[serde(rename_all = "camelCase")]
686pub struct ModEventView<'a> {
687 pub created_at: jacquard_common::types::string::Datetime,
688 #[serde(borrow)]
689 pub created_by: jacquard_common::types::string::Did<'a>,
690 #[serde(skip_serializing_if = "std::option::Option::is_none")]
691 #[serde(borrow)]
692 pub creator_handle: std::option::Option<jacquard_common::CowStr<'a>>,
693 #[serde(borrow)]
694 pub event: ModEventViewRecordEvent<'a>,
695 pub id: i64,
696 #[serde(skip_serializing_if = "std::option::Option::is_none")]
697 #[serde(borrow)]
698 pub mod_tool: std::option::Option<crate::tools_ozone::moderation::ModTool<'a>>,
699 #[serde(borrow)]
700 pub subject: ModEventViewRecordSubject<'a>,
701 #[serde(borrow)]
702 pub subject_blob_cids: Vec<jacquard_common::CowStr<'a>>,
703 #[serde(skip_serializing_if = "std::option::Option::is_none")]
704 #[serde(borrow)]
705 pub subject_handle: std::option::Option<jacquard_common::CowStr<'a>>,
706}
707
708#[jacquard_derive::open_union]
709#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
710#[serde(tag = "$type")]
711#[serde(bound(deserialize = "'de: 'a"))]
712pub enum ModEventViewRecordEvent<'a> {}
713impl jacquard_common::IntoStatic for ModEventViewRecordEvent<'_> {
714 type Output = ModEventViewRecordEvent<'static>;
715 fn into_static(self) -> Self::Output {
716 match self {
717 ModEventViewRecordEvent::Unknown(v) => {
718 ModEventViewRecordEvent::Unknown(v.into_static())
719 }
720 }
721 }
722}
723
724#[jacquard_derive::open_union]
725#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
726#[serde(tag = "$type")]
727#[serde(bound(deserialize = "'de: 'a"))]
728pub enum ModEventViewRecordSubject<'a> {
729 #[serde(rename = "com.atproto.admin.defs#repoRef")]
730 DefsRepoRef(Box<crate::com_atproto::admin::RepoRef<'a>>),
731 #[serde(rename = "com.atproto.repo.strongRef")]
732 StrongRef(Box<crate::com_atproto::repo::strong_ref::StrongRef<'a>>),
733 #[serde(rename = "chat.bsky.convo.defs#messageRef")]
734 DefsMessageRef(Box<crate::chat_bsky::convo::MessageRef<'a>>),
735}
736
737impl jacquard_common::IntoStatic for ModEventViewRecordSubject<'_> {
738 type Output = ModEventViewRecordSubject<'static>;
739 fn into_static(self) -> Self::Output {
740 match self {
741 ModEventViewRecordSubject::DefsRepoRef(v) => {
742 ModEventViewRecordSubject::DefsRepoRef(v.into_static())
743 }
744 ModEventViewRecordSubject::StrongRef(v) => {
745 ModEventViewRecordSubject::StrongRef(v.into_static())
746 }
747 ModEventViewRecordSubject::DefsMessageRef(v) => {
748 ModEventViewRecordSubject::DefsMessageRef(v.into_static())
749 }
750 ModEventViewRecordSubject::Unknown(v) => {
751 ModEventViewRecordSubject::Unknown(v.into_static())
752 }
753 }
754 }
755}
756
757impl jacquard_common::IntoStatic for ModEventView<'_> {
758 type Output = ModEventView<'static>;
759 fn into_static(self) -> Self::Output {
760 ModEventView {
761 created_at: self.created_at.into_static(),
762 created_by: self.created_by.into_static(),
763 creator_handle: self.creator_handle.into_static(),
764 event: self.event.into_static(),
765 id: self.id.into_static(),
766 mod_tool: self.mod_tool.into_static(),
767 subject: self.subject.into_static(),
768 subject_blob_cids: self.subject_blob_cids.into_static(),
769 subject_handle: self.subject_handle.into_static(),
770 extra_data: self.extra_data.into_static(),
771 }
772 }
773}
774
775#[jacquard_derive::lexicon]
776#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
777#[serde(rename_all = "camelCase")]
778pub struct ModEventViewDetail<'a> {
779 pub created_at: jacquard_common::types::string::Datetime,
780 #[serde(borrow)]
781 pub created_by: jacquard_common::types::string::Did<'a>,
782 #[serde(borrow)]
783 pub event: ModEventViewDetailRecordEvent<'a>,
784 pub id: i64,
785 #[serde(skip_serializing_if = "std::option::Option::is_none")]
786 #[serde(borrow)]
787 pub mod_tool: std::option::Option<crate::tools_ozone::moderation::ModTool<'a>>,
788 #[serde(borrow)]
789 pub subject: ModEventViewDetailRecordSubject<'a>,
790 #[serde(borrow)]
791 pub subject_blobs: Vec<crate::tools_ozone::moderation::BlobView<'a>>,
792}
793
794#[jacquard_derive::open_union]
795#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
796#[serde(tag = "$type")]
797#[serde(bound(deserialize = "'de: 'a"))]
798pub enum ModEventViewDetailRecordEvent<'a> {}
799impl jacquard_common::IntoStatic for ModEventViewDetailRecordEvent<'_> {
800 type Output = ModEventViewDetailRecordEvent<'static>;
801 fn into_static(self) -> Self::Output {
802 match self {
803 ModEventViewDetailRecordEvent::Unknown(v) => {
804 ModEventViewDetailRecordEvent::Unknown(v.into_static())
805 }
806 }
807 }
808}
809
810#[jacquard_derive::open_union]
811#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
812#[serde(tag = "$type")]
813#[serde(bound(deserialize = "'de: 'a"))]
814pub enum ModEventViewDetailRecordSubject<'a> {}
815impl jacquard_common::IntoStatic for ModEventViewDetailRecordSubject<'_> {
816 type Output = ModEventViewDetailRecordSubject<'static>;
817 fn into_static(self) -> Self::Output {
818 match self {
819 ModEventViewDetailRecordSubject::Unknown(v) => {
820 ModEventViewDetailRecordSubject::Unknown(v.into_static())
821 }
822 }
823 }
824}
825
826impl jacquard_common::IntoStatic for ModEventViewDetail<'_> {
827 type Output = ModEventViewDetail<'static>;
828 fn into_static(self) -> Self::Output {
829 ModEventViewDetail {
830 created_at: self.created_at.into_static(),
831 created_by: self.created_by.into_static(),
832 event: self.event.into_static(),
833 id: self.id.into_static(),
834 mod_tool: self.mod_tool.into_static(),
835 subject: self.subject.into_static(),
836 subject_blobs: self.subject_blobs.into_static(),
837 extra_data: self.extra_data.into_static(),
838 }
839 }
840}
841
842///Moderation tool information for tracing the source of the action
843#[jacquard_derive::lexicon]
844#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
845#[serde(rename_all = "camelCase")]
846pub struct ModTool<'a> {
847 ///Additional arbitrary metadata about the source
848 #[serde(skip_serializing_if = "std::option::Option::is_none")]
849 #[serde(borrow)]
850 pub meta: std::option::Option<jacquard_common::types::value::Data<'a>>,
851 ///Name/identifier of the source (e.g., 'automod', 'ozone/workspace')
852 #[serde(borrow)]
853 pub name: jacquard_common::CowStr<'a>,
854}
855
856impl jacquard_common::IntoStatic for ModTool<'_> {
857 type Output = ModTool<'static>;
858 fn into_static(self) -> Self::Output {
859 ModTool {
860 meta: self.meta.into_static(),
861 name: self.name.into_static(),
862 extra_data: self.extra_data.into_static(),
863 }
864 }
865}
866
867#[jacquard_derive::lexicon]
868#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
869#[serde(rename_all = "camelCase")]
870pub struct Moderation<'a> {
871 #[serde(skip_serializing_if = "std::option::Option::is_none")]
872 #[serde(borrow)]
873 pub subject_status: std::option::Option<
874 crate::tools_ozone::moderation::SubjectStatusView<'a>,
875 >,
876}
877
878impl jacquard_common::IntoStatic for Moderation<'_> {
879 type Output = Moderation<'static>;
880 fn into_static(self) -> Self::Output {
881 Moderation {
882 subject_status: self.subject_status.into_static(),
883 extra_data: self.extra_data.into_static(),
884 }
885 }
886}
887
888#[jacquard_derive::lexicon]
889#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
890#[serde(rename_all = "camelCase")]
891pub struct ModerationDetail<'a> {
892 #[serde(skip_serializing_if = "std::option::Option::is_none")]
893 #[serde(borrow)]
894 pub subject_status: std::option::Option<
895 crate::tools_ozone::moderation::SubjectStatusView<'a>,
896 >,
897}
898
899impl jacquard_common::IntoStatic for ModerationDetail<'_> {
900 type Output = ModerationDetail<'static>;
901 fn into_static(self) -> Self::Output {
902 ModerationDetail {
903 subject_status: self.subject_status.into_static(),
904 extra_data: self.extra_data.into_static(),
905 }
906 }
907}
908
909///Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
910#[jacquard_derive::lexicon]
911#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
912#[serde(rename_all = "camelCase")]
913pub struct RecordEvent<'a> {
914 #[serde(skip_serializing_if = "std::option::Option::is_none")]
915 #[serde(borrow)]
916 pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
917 #[serde(skip_serializing_if = "std::option::Option::is_none")]
918 #[serde(borrow)]
919 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
920 #[serde(borrow)]
921 pub op: jacquard_common::CowStr<'a>,
922 pub timestamp: jacquard_common::types::string::Datetime,
923}
924
925impl jacquard_common::IntoStatic for RecordEvent<'_> {
926 type Output = RecordEvent<'static>;
927 fn into_static(self) -> Self::Output {
928 RecordEvent {
929 cid: self.cid.into_static(),
930 comment: self.comment.into_static(),
931 op: self.op.into_static(),
932 timestamp: self.timestamp.into_static(),
933 extra_data: self.extra_data.into_static(),
934 }
935 }
936}
937
938#[jacquard_derive::lexicon]
939#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
940#[serde(rename_all = "camelCase")]
941pub struct RecordHosting<'a> {
942 #[serde(skip_serializing_if = "std::option::Option::is_none")]
943 pub created_at: std::option::Option<jacquard_common::types::string::Datetime>,
944 #[serde(skip_serializing_if = "std::option::Option::is_none")]
945 pub deleted_at: std::option::Option<jacquard_common::types::string::Datetime>,
946 #[serde(borrow)]
947 pub status: jacquard_common::CowStr<'a>,
948 #[serde(skip_serializing_if = "std::option::Option::is_none")]
949 pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>,
950}
951
952impl jacquard_common::IntoStatic for RecordHosting<'_> {
953 type Output = RecordHosting<'static>;
954 fn into_static(self) -> Self::Output {
955 RecordHosting {
956 created_at: self.created_at.into_static(),
957 deleted_at: self.deleted_at.into_static(),
958 status: self.status.into_static(),
959 updated_at: self.updated_at.into_static(),
960 extra_data: self.extra_data.into_static(),
961 }
962 }
963}
964
965#[jacquard_derive::lexicon]
966#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
967#[serde(rename_all = "camelCase")]
968pub struct RecordView<'a> {
969 #[serde(borrow)]
970 pub blob_cids: Vec<jacquard_common::types::string::Cid<'a>>,
971 #[serde(borrow)]
972 pub cid: jacquard_common::types::string::Cid<'a>,
973 pub indexed_at: jacquard_common::types::string::Datetime,
974 #[serde(borrow)]
975 pub moderation: crate::tools_ozone::moderation::Moderation<'a>,
976 #[serde(borrow)]
977 pub repo: crate::tools_ozone::moderation::RepoView<'a>,
978 #[serde(borrow)]
979 pub uri: jacquard_common::types::string::AtUri<'a>,
980 #[serde(borrow)]
981 pub value: jacquard_common::types::value::Data<'a>,
982}
983
984impl jacquard_common::IntoStatic for RecordView<'_> {
985 type Output = RecordView<'static>;
986 fn into_static(self) -> Self::Output {
987 RecordView {
988 blob_cids: self.blob_cids.into_static(),
989 cid: self.cid.into_static(),
990 indexed_at: self.indexed_at.into_static(),
991 moderation: self.moderation.into_static(),
992 repo: self.repo.into_static(),
993 uri: self.uri.into_static(),
994 value: self.value.into_static(),
995 extra_data: self.extra_data.into_static(),
996 }
997 }
998}
999
1000#[jacquard_derive::lexicon]
1001#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1002#[serde(rename_all = "camelCase")]
1003pub struct RecordViewDetail<'a> {
1004 #[serde(borrow)]
1005 pub blobs: Vec<crate::tools_ozone::moderation::BlobView<'a>>,
1006 #[serde(borrow)]
1007 pub cid: jacquard_common::types::string::Cid<'a>,
1008 pub indexed_at: jacquard_common::types::string::Datetime,
1009 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1010 #[serde(borrow)]
1011 pub labels: std::option::Option<Vec<crate::com_atproto::label::Label<'a>>>,
1012 #[serde(borrow)]
1013 pub moderation: crate::tools_ozone::moderation::ModerationDetail<'a>,
1014 #[serde(borrow)]
1015 pub repo: crate::tools_ozone::moderation::RepoView<'a>,
1016 #[serde(borrow)]
1017 pub uri: jacquard_common::types::string::AtUri<'a>,
1018 #[serde(borrow)]
1019 pub value: jacquard_common::types::value::Data<'a>,
1020}
1021
1022impl jacquard_common::IntoStatic for RecordViewDetail<'_> {
1023 type Output = RecordViewDetail<'static>;
1024 fn into_static(self) -> Self::Output {
1025 RecordViewDetail {
1026 blobs: self.blobs.into_static(),
1027 cid: self.cid.into_static(),
1028 indexed_at: self.indexed_at.into_static(),
1029 labels: self.labels.into_static(),
1030 moderation: self.moderation.into_static(),
1031 repo: self.repo.into_static(),
1032 uri: self.uri.into_static(),
1033 value: self.value.into_static(),
1034 extra_data: self.extra_data.into_static(),
1035 }
1036 }
1037}
1038
1039#[jacquard_derive::lexicon]
1040#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1041#[serde(rename_all = "camelCase")]
1042pub struct RecordViewNotFound<'a> {
1043 #[serde(borrow)]
1044 pub uri: jacquard_common::types::string::AtUri<'a>,
1045}
1046
1047impl jacquard_common::IntoStatic for RecordViewNotFound<'_> {
1048 type Output = RecordViewNotFound<'static>;
1049 fn into_static(self) -> Self::Output {
1050 RecordViewNotFound {
1051 uri: self.uri.into_static(),
1052 extra_data: self.extra_data.into_static(),
1053 }
1054 }
1055}
1056
1057///Statistics about a set of record subject items
1058#[jacquard_derive::lexicon]
1059#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1060#[serde(rename_all = "camelCase")]
1061pub struct RecordsStats<'a> {
1062 ///Number of items that were appealed at least once
1063 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1064 pub appealed_count: std::option::Option<i64>,
1065 ///Number of items that were escalated at least once
1066 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1067 pub escalated_count: std::option::Option<i64>,
1068 ///Number of item currently in "reviewOpen" or "reviewEscalated" state
1069 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1070 pub pending_count: std::option::Option<i64>,
1071 ///Number of item currently in "reviewNone" or "reviewClosed" state
1072 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1073 pub processed_count: std::option::Option<i64>,
1074 ///Number of items that were reported at least once
1075 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1076 pub reported_count: std::option::Option<i64>,
1077 ///Total number of item in the set
1078 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1079 pub subject_count: std::option::Option<i64>,
1080 ///Number of item currently taken down
1081 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1082 pub takendown_count: std::option::Option<i64>,
1083 ///Cumulative sum of the number of reports on the items in the set
1084 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1085 pub total_reports: std::option::Option<i64>,
1086}
1087
1088impl jacquard_common::IntoStatic for RecordsStats<'_> {
1089 type Output = RecordsStats<'static>;
1090 fn into_static(self) -> Self::Output {
1091 RecordsStats {
1092 appealed_count: self.appealed_count.into_static(),
1093 escalated_count: self.escalated_count.into_static(),
1094 pending_count: self.pending_count.into_static(),
1095 processed_count: self.processed_count.into_static(),
1096 reported_count: self.reported_count.into_static(),
1097 subject_count: self.subject_count.into_static(),
1098 takendown_count: self.takendown_count.into_static(),
1099 total_reports: self.total_reports.into_static(),
1100 extra_data: self.extra_data.into_static(),
1101 }
1102 }
1103}
1104
1105#[jacquard_derive::lexicon]
1106#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1107#[serde(rename_all = "camelCase")]
1108pub struct RepoView<'a> {
1109 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1110 pub deactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
1111 #[serde(borrow)]
1112 pub did: jacquard_common::types::string::Did<'a>,
1113 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1114 #[serde(borrow)]
1115 pub email: std::option::Option<jacquard_common::CowStr<'a>>,
1116 #[serde(borrow)]
1117 pub handle: jacquard_common::types::string::Handle<'a>,
1118 pub indexed_at: jacquard_common::types::string::Datetime,
1119 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1120 #[serde(borrow)]
1121 pub invite_note: std::option::Option<jacquard_common::CowStr<'a>>,
1122 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1123 #[serde(borrow)]
1124 pub invited_by: std::option::Option<crate::com_atproto::server::InviteCode<'a>>,
1125 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1126 pub invites_disabled: std::option::Option<bool>,
1127 #[serde(borrow)]
1128 pub moderation: crate::tools_ozone::moderation::Moderation<'a>,
1129 #[serde(borrow)]
1130 pub related_records: Vec<jacquard_common::types::value::Data<'a>>,
1131 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1132 #[serde(borrow)]
1133 pub threat_signatures: std::option::Option<
1134 Vec<crate::com_atproto::admin::ThreatSignature<'a>>,
1135 >,
1136}
1137
1138impl jacquard_common::IntoStatic for RepoView<'_> {
1139 type Output = RepoView<'static>;
1140 fn into_static(self) -> Self::Output {
1141 RepoView {
1142 deactivated_at: self.deactivated_at.into_static(),
1143 did: self.did.into_static(),
1144 email: self.email.into_static(),
1145 handle: self.handle.into_static(),
1146 indexed_at: self.indexed_at.into_static(),
1147 invite_note: self.invite_note.into_static(),
1148 invited_by: self.invited_by.into_static(),
1149 invites_disabled: self.invites_disabled.into_static(),
1150 moderation: self.moderation.into_static(),
1151 related_records: self.related_records.into_static(),
1152 threat_signatures: self.threat_signatures.into_static(),
1153 extra_data: self.extra_data.into_static(),
1154 }
1155 }
1156}
1157
1158#[jacquard_derive::lexicon]
1159#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1160#[serde(rename_all = "camelCase")]
1161pub struct RepoViewDetail<'a> {
1162 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1163 pub deactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
1164 #[serde(borrow)]
1165 pub did: jacquard_common::types::string::Did<'a>,
1166 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1167 #[serde(borrow)]
1168 pub email: std::option::Option<jacquard_common::CowStr<'a>>,
1169 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1170 pub email_confirmed_at: std::option::Option<
1171 jacquard_common::types::string::Datetime,
1172 >,
1173 #[serde(borrow)]
1174 pub handle: jacquard_common::types::string::Handle<'a>,
1175 pub indexed_at: jacquard_common::types::string::Datetime,
1176 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1177 #[serde(borrow)]
1178 pub invite_note: std::option::Option<jacquard_common::CowStr<'a>>,
1179 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1180 #[serde(borrow)]
1181 pub invited_by: std::option::Option<crate::com_atproto::server::InviteCode<'a>>,
1182 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1183 #[serde(borrow)]
1184 pub invites: std::option::Option<Vec<crate::com_atproto::server::InviteCode<'a>>>,
1185 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1186 pub invites_disabled: std::option::Option<bool>,
1187 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1188 #[serde(borrow)]
1189 pub labels: std::option::Option<Vec<crate::com_atproto::label::Label<'a>>>,
1190 #[serde(borrow)]
1191 pub moderation: crate::tools_ozone::moderation::ModerationDetail<'a>,
1192 #[serde(borrow)]
1193 pub related_records: Vec<jacquard_common::types::value::Data<'a>>,
1194 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1195 #[serde(borrow)]
1196 pub threat_signatures: std::option::Option<
1197 Vec<crate::com_atproto::admin::ThreatSignature<'a>>,
1198 >,
1199}
1200
1201impl jacquard_common::IntoStatic for RepoViewDetail<'_> {
1202 type Output = RepoViewDetail<'static>;
1203 fn into_static(self) -> Self::Output {
1204 RepoViewDetail {
1205 deactivated_at: self.deactivated_at.into_static(),
1206 did: self.did.into_static(),
1207 email: self.email.into_static(),
1208 email_confirmed_at: self.email_confirmed_at.into_static(),
1209 handle: self.handle.into_static(),
1210 indexed_at: self.indexed_at.into_static(),
1211 invite_note: self.invite_note.into_static(),
1212 invited_by: self.invited_by.into_static(),
1213 invites: self.invites.into_static(),
1214 invites_disabled: self.invites_disabled.into_static(),
1215 labels: self.labels.into_static(),
1216 moderation: self.moderation.into_static(),
1217 related_records: self.related_records.into_static(),
1218 threat_signatures: self.threat_signatures.into_static(),
1219 extra_data: self.extra_data.into_static(),
1220 }
1221 }
1222}
1223
1224#[jacquard_derive::lexicon]
1225#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1226#[serde(rename_all = "camelCase")]
1227pub struct RepoViewNotFound<'a> {
1228 #[serde(borrow)]
1229 pub did: jacquard_common::types::string::Did<'a>,
1230}
1231
1232impl jacquard_common::IntoStatic for RepoViewNotFound<'_> {
1233 type Output = RepoViewNotFound<'static>;
1234 fn into_static(self) -> Self::Output {
1235 RepoViewNotFound {
1236 did: self.did.into_static(),
1237 extra_data: self.extra_data.into_static(),
1238 }
1239 }
1240}
1241
1242#[jacquard_derive::lexicon]
1243#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1244#[serde(rename_all = "camelCase")]
1245pub struct ReporterStats<'a> {
1246 ///The total number of reports made by the user on accounts.
1247 pub account_report_count: i64,
1248 #[serde(borrow)]
1249 pub did: jacquard_common::types::string::Did<'a>,
1250 ///The total number of accounts labeled as a result of the user's reports.
1251 pub labeled_account_count: i64,
1252 ///The total number of records labeled as a result of the user's reports.
1253 pub labeled_record_count: i64,
1254 ///The total number of reports made by the user on records.
1255 pub record_report_count: i64,
1256 ///The total number of accounts reported by the user.
1257 pub reported_account_count: i64,
1258 ///The total number of records reported by the user.
1259 pub reported_record_count: i64,
1260 ///The total number of accounts taken down as a result of the user's reports.
1261 pub takendown_account_count: i64,
1262 ///The total number of records taken down as a result of the user's reports.
1263 pub takendown_record_count: i64,
1264}
1265
1266impl jacquard_common::IntoStatic for ReporterStats<'_> {
1267 type Output = ReporterStats<'static>;
1268 fn into_static(self) -> Self::Output {
1269 ReporterStats {
1270 account_report_count: self.account_report_count.into_static(),
1271 did: self.did.into_static(),
1272 labeled_account_count: self.labeled_account_count.into_static(),
1273 labeled_record_count: self.labeled_record_count.into_static(),
1274 record_report_count: self.record_report_count.into_static(),
1275 reported_account_count: self.reported_account_count.into_static(),
1276 reported_record_count: self.reported_record_count.into_static(),
1277 takendown_account_count: self.takendown_account_count.into_static(),
1278 takendown_record_count: self.takendown_record_count.into_static(),
1279 extra_data: self.extra_data.into_static(),
1280 }
1281 }
1282}
1283
1284///Account credentials revocation by moderators. Only works on DID subjects.
1285#[jacquard_derive::lexicon]
1286#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1287#[serde(rename_all = "camelCase")]
1288pub struct RevokeAccountCredentialsEvent<'a> {
1289 ///Comment describing the reason for the revocation.
1290 #[serde(borrow)]
1291 pub comment: jacquard_common::CowStr<'a>,
1292}
1293
1294impl jacquard_common::IntoStatic for RevokeAccountCredentialsEvent<'_> {
1295 type Output = RevokeAccountCredentialsEvent<'static>;
1296 fn into_static(self) -> Self::Output {
1297 RevokeAccountCredentialsEvent {
1298 comment: self.comment.into_static(),
1299 extra_data: self.extra_data.into_static(),
1300 }
1301 }
1302}
1303
1304#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1305pub enum SubjectReviewState<'a> {
1306 ReviewOpen,
1307 ReviewEscalated,
1308 ReviewClosed,
1309 ReviewNone,
1310 Other(jacquard_common::CowStr<'a>),
1311}
1312
1313impl<'a> SubjectReviewState<'a> {
1314 pub fn as_str(&self) -> &str {
1315 match self {
1316 Self::ReviewOpen => "#reviewOpen",
1317 Self::ReviewEscalated => "#reviewEscalated",
1318 Self::ReviewClosed => "#reviewClosed",
1319 Self::ReviewNone => "#reviewNone",
1320 Self::Other(s) => s.as_ref(),
1321 }
1322 }
1323}
1324
1325impl<'a> From<&'a str> for SubjectReviewState<'a> {
1326 fn from(s: &'a str) -> Self {
1327 match s {
1328 "#reviewOpen" => Self::ReviewOpen,
1329 "#reviewEscalated" => Self::ReviewEscalated,
1330 "#reviewClosed" => Self::ReviewClosed,
1331 "#reviewNone" => Self::ReviewNone,
1332 _ => Self::Other(jacquard_common::CowStr::from(s)),
1333 }
1334 }
1335}
1336
1337impl<'a> From<String> for SubjectReviewState<'a> {
1338 fn from(s: String) -> Self {
1339 match s.as_str() {
1340 "#reviewOpen" => Self::ReviewOpen,
1341 "#reviewEscalated" => Self::ReviewEscalated,
1342 "#reviewClosed" => Self::ReviewClosed,
1343 "#reviewNone" => Self::ReviewNone,
1344 _ => Self::Other(jacquard_common::CowStr::from(s)),
1345 }
1346 }
1347}
1348
1349impl<'a> AsRef<str> for SubjectReviewState<'a> {
1350 fn as_ref(&self) -> &str {
1351 self.as_str()
1352 }
1353}
1354
1355impl<'a> serde::Serialize for SubjectReviewState<'a> {
1356 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1357 where
1358 S: serde::Serializer,
1359 {
1360 serializer.serialize_str(self.as_str())
1361 }
1362}
1363
1364impl<'de, 'a> serde::Deserialize<'de> for SubjectReviewState<'a>
1365where
1366 'de: 'a,
1367{
1368 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1369 where
1370 D: serde::Deserializer<'de>,
1371 {
1372 let s = <&'de str>::deserialize(deserializer)?;
1373 Ok(Self::from(s))
1374 }
1375}
1376
1377impl jacquard_common::IntoStatic for SubjectReviewState<'_> {
1378 type Output = SubjectReviewState<'static>;
1379 fn into_static(self) -> Self::Output {
1380 match self {
1381 SubjectReviewState::ReviewOpen => SubjectReviewState::ReviewOpen,
1382 SubjectReviewState::ReviewEscalated => SubjectReviewState::ReviewEscalated,
1383 SubjectReviewState::ReviewClosed => SubjectReviewState::ReviewClosed,
1384 SubjectReviewState::ReviewNone => SubjectReviewState::ReviewNone,
1385 SubjectReviewState::Other(v) => SubjectReviewState::Other(v.into_static()),
1386 }
1387 }
1388}
1389
1390#[jacquard_derive::lexicon]
1391#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1392#[serde(rename_all = "camelCase")]
1393pub struct SubjectStatusView<'a> {
1394 ///Statistics related to the account subject
1395 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1396 #[serde(borrow)]
1397 pub account_stats: std::option::Option<
1398 crate::tools_ozone::moderation::AccountStats<'a>,
1399 >,
1400 ///Current age assurance state of the subject.
1401 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1402 #[serde(borrow)]
1403 pub age_assurance_state: std::option::Option<jacquard_common::CowStr<'a>>,
1404 ///Whether or not the last successful update to age assurance was made by the user or admin.
1405 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1406 #[serde(borrow)]
1407 pub age_assurance_updated_by: std::option::Option<jacquard_common::CowStr<'a>>,
1408 ///True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators.
1409 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1410 pub appealed: std::option::Option<bool>,
1411 ///Sticky comment on the subject.
1412 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1413 #[serde(borrow)]
1414 pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
1415 ///Timestamp referencing the first moderation status impacting event was emitted on the subject
1416 pub created_at: jacquard_common::types::string::Datetime,
1417 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1418 #[serde(borrow)]
1419 pub hosting: std::option::Option<SubjectStatusViewRecordHosting<'a>>,
1420 pub id: i64,
1421 ///Timestamp referencing when the author of the subject appealed a moderation action
1422 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1423 pub last_appealed_at: std::option::Option<jacquard_common::types::string::Datetime>,
1424 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1425 pub last_reported_at: std::option::Option<jacquard_common::types::string::Datetime>,
1426 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1427 pub last_reviewed_at: std::option::Option<jacquard_common::types::string::Datetime>,
1428 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1429 #[serde(borrow)]
1430 pub last_reviewed_by: std::option::Option<jacquard_common::types::string::Did<'a>>,
1431 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1432 pub mute_reporting_until: std::option::Option<
1433 jacquard_common::types::string::Datetime,
1434 >,
1435 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1436 pub mute_until: std::option::Option<jacquard_common::types::string::Datetime>,
1437 ///Numeric value representing the level of priority. Higher score means higher priority.
1438 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1439 pub priority_score: std::option::Option<i64>,
1440 ///Statistics related to the record subjects authored by the subject's account
1441 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1442 #[serde(borrow)]
1443 pub records_stats: std::option::Option<
1444 crate::tools_ozone::moderation::RecordsStats<'a>,
1445 >,
1446 #[serde(borrow)]
1447 pub review_state: crate::tools_ozone::moderation::SubjectReviewState<'a>,
1448 #[serde(borrow)]
1449 pub subject: SubjectStatusViewRecordSubject<'a>,
1450 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1451 #[serde(borrow)]
1452 pub subject_blob_cids: std::option::Option<
1453 Vec<jacquard_common::types::string::Cid<'a>>,
1454 >,
1455 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1456 #[serde(borrow)]
1457 pub subject_repo_handle: std::option::Option<jacquard_common::CowStr<'a>>,
1458 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1459 pub suspend_until: std::option::Option<jacquard_common::types::string::Datetime>,
1460 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1461 #[serde(borrow)]
1462 pub tags: std::option::Option<Vec<jacquard_common::CowStr<'a>>>,
1463 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1464 pub takendown: std::option::Option<bool>,
1465 ///Timestamp referencing when the last update was made to the moderation status of the subject
1466 pub updated_at: jacquard_common::types::string::Datetime,
1467}
1468
1469#[jacquard_derive::open_union]
1470#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1471#[serde(tag = "$type")]
1472#[serde(bound(deserialize = "'de: 'a"))]
1473pub enum SubjectStatusViewRecordHosting<'a> {}
1474impl jacquard_common::IntoStatic for SubjectStatusViewRecordHosting<'_> {
1475 type Output = SubjectStatusViewRecordHosting<'static>;
1476 fn into_static(self) -> Self::Output {
1477 match self {
1478 SubjectStatusViewRecordHosting::Unknown(v) => {
1479 SubjectStatusViewRecordHosting::Unknown(v.into_static())
1480 }
1481 }
1482 }
1483}
1484
1485#[jacquard_derive::open_union]
1486#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1487#[serde(tag = "$type")]
1488#[serde(bound(deserialize = "'de: 'a"))]
1489pub enum SubjectStatusViewRecordSubject<'a> {
1490 #[serde(rename = "com.atproto.admin.defs#repoRef")]
1491 DefsRepoRef(Box<crate::com_atproto::admin::RepoRef<'a>>),
1492 #[serde(rename = "com.atproto.repo.strongRef")]
1493 StrongRef(Box<crate::com_atproto::repo::strong_ref::StrongRef<'a>>),
1494 #[serde(rename = "chat.bsky.convo.defs#messageRef")]
1495 DefsMessageRef(Box<crate::chat_bsky::convo::MessageRef<'a>>),
1496}
1497
1498impl jacquard_common::IntoStatic for SubjectStatusViewRecordSubject<'_> {
1499 type Output = SubjectStatusViewRecordSubject<'static>;
1500 fn into_static(self) -> Self::Output {
1501 match self {
1502 SubjectStatusViewRecordSubject::DefsRepoRef(v) => {
1503 SubjectStatusViewRecordSubject::DefsRepoRef(v.into_static())
1504 }
1505 SubjectStatusViewRecordSubject::StrongRef(v) => {
1506 SubjectStatusViewRecordSubject::StrongRef(v.into_static())
1507 }
1508 SubjectStatusViewRecordSubject::DefsMessageRef(v) => {
1509 SubjectStatusViewRecordSubject::DefsMessageRef(v.into_static())
1510 }
1511 SubjectStatusViewRecordSubject::Unknown(v) => {
1512 SubjectStatusViewRecordSubject::Unknown(v.into_static())
1513 }
1514 }
1515 }
1516}
1517
1518impl jacquard_common::IntoStatic for SubjectStatusView<'_> {
1519 type Output = SubjectStatusView<'static>;
1520 fn into_static(self) -> Self::Output {
1521 SubjectStatusView {
1522 account_stats: self.account_stats.into_static(),
1523 age_assurance_state: self.age_assurance_state.into_static(),
1524 age_assurance_updated_by: self.age_assurance_updated_by.into_static(),
1525 appealed: self.appealed.into_static(),
1526 comment: self.comment.into_static(),
1527 created_at: self.created_at.into_static(),
1528 hosting: self.hosting.into_static(),
1529 id: self.id.into_static(),
1530 last_appealed_at: self.last_appealed_at.into_static(),
1531 last_reported_at: self.last_reported_at.into_static(),
1532 last_reviewed_at: self.last_reviewed_at.into_static(),
1533 last_reviewed_by: self.last_reviewed_by.into_static(),
1534 mute_reporting_until: self.mute_reporting_until.into_static(),
1535 mute_until: self.mute_until.into_static(),
1536 priority_score: self.priority_score.into_static(),
1537 records_stats: self.records_stats.into_static(),
1538 review_state: self.review_state.into_static(),
1539 subject: self.subject.into_static(),
1540 subject_blob_cids: self.subject_blob_cids.into_static(),
1541 subject_repo_handle: self.subject_repo_handle.into_static(),
1542 suspend_until: self.suspend_until.into_static(),
1543 tags: self.tags.into_static(),
1544 takendown: self.takendown.into_static(),
1545 updated_at: self.updated_at.into_static(),
1546 extra_data: self.extra_data.into_static(),
1547 }
1548 }
1549}
1550
1551///Detailed view of a subject. For record subjects, the author's repo and profile will be returned.
1552#[jacquard_derive::lexicon]
1553#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1554#[serde(rename_all = "camelCase")]
1555pub struct SubjectView<'a> {
1556 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1557 #[serde(borrow)]
1558 pub profile: std::option::Option<SubjectViewRecordProfile<'a>>,
1559 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1560 #[serde(borrow)]
1561 pub record: std::option::Option<
1562 crate::tools_ozone::moderation::RecordViewDetail<'a>,
1563 >,
1564 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1565 #[serde(borrow)]
1566 pub repo: std::option::Option<crate::tools_ozone::moderation::RepoViewDetail<'a>>,
1567 #[serde(skip_serializing_if = "std::option::Option::is_none")]
1568 #[serde(borrow)]
1569 pub status: std::option::Option<
1570 crate::tools_ozone::moderation::SubjectStatusView<'a>,
1571 >,
1572 #[serde(borrow)]
1573 pub subject: jacquard_common::CowStr<'a>,
1574 #[serde(borrow)]
1575 pub r#type: crate::com_atproto::moderation::SubjectType<'a>,
1576}
1577
1578#[jacquard_derive::open_union]
1579#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1580#[serde(tag = "$type")]
1581#[serde(bound(deserialize = "'de: 'a"))]
1582pub enum SubjectViewRecordProfile<'a> {}
1583impl jacquard_common::IntoStatic for SubjectViewRecordProfile<'_> {
1584 type Output = SubjectViewRecordProfile<'static>;
1585 fn into_static(self) -> Self::Output {
1586 match self {
1587 SubjectViewRecordProfile::Unknown(v) => {
1588 SubjectViewRecordProfile::Unknown(v.into_static())
1589 }
1590 }
1591 }
1592}
1593
1594impl jacquard_common::IntoStatic for SubjectView<'_> {
1595 type Output = SubjectView<'static>;
1596 fn into_static(self) -> Self::Output {
1597 SubjectView {
1598 profile: self.profile.into_static(),
1599 record: self.record.into_static(),
1600 repo: self.repo.into_static(),
1601 status: self.status.into_static(),
1602 subject: self.subject.into_static(),
1603 r#type: self.r#type.into_static(),
1604 extra_data: self.extra_data.into_static(),
1605 }
1606 }
1607}
1608
1609#[jacquard_derive::lexicon]
1610#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
1611#[serde(rename_all = "camelCase")]
1612pub struct VideoDetails<'a> {
1613 pub height: i64,
1614 pub length: i64,
1615 pub width: i64,
1616}
1617
1618impl jacquard_common::IntoStatic for VideoDetails<'_> {
1619 type Output = VideoDetails<'static>;
1620 fn into_static(self) -> Self::Output {
1621 VideoDetails {
1622 height: self.height.into_static(),
1623 length: self.length.into_static(),
1624 width: self.width.into_static(),
1625 extra_data: self.extra_data.into_static(),
1626 }
1627 }
1628}