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}