jacquard_api/tools_ozone/
moderation.rs

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